2016-01-06 112 views
-2

我試圖得到的命令行參數初始化下面的類處理在Python命令行參數

import sys 


class Test(object): 

    def __init__(self): 
     for item in sys.argv: 
      if item.startswith("-Username"): 
       self.Username = item.split("Username=", 1)[1] 
      if item.startswith("-SessionID"): 
       self.sessionID = item.split("SessionID=", 1)[1] 
      if item.startswith("-appName"): 
       self.appName = item.split("appName=", 1)[1] 

    def run(self): 
     msg = '''Username {0} with SessionID {1} is using the {2} app.'''.format(self.Username, self.SessionID, self.appName) 
     print msg 

if __name__ == '__main__': 
Test().run() 

在命令行我執行:

python test.py -Username=AAA, -SessionID=223, -appName=ABC 

這樣做具有以下錯誤:

AttributeError: 'Test' object has no attribute 'Username'. 

我想知道爲什麼?任何幫助表示讚賞。

+0

如果item.startswith(「 - 用戶名」)''只有'self.Username''。否則不設置。 –

+1

此問題與處理命令行參數無關。 –

+1

也許你遇到過一些案例問題?有sessionID和SessionID,除此之外,一切都適合我。 – danielfranca

回答

0

這是變量命名不一致的問題。如果大寫的問題是固定的,代碼按預期工作:

import sys 

class Test(object): 

    def __init__(self): 
    for item in sys.argv: 
     if item.startswith("-Username"): 
     self.Username = item.split("Username=", 1)[1] 
     if item.startswith("-SessionID"): 
     self.sessionID = item.split("SessionID=", 1)[1] 
     if item.startswith("-appName"): 
     self.appName = item.split("appName=", 1)[1] 

    def run(self): 
    msg = '''Username {0} with SessionID {1} is using the {2} app.'''.format(self.Username, self.sessionID, self.appName) 
    print msg 

if __name__ == '__main__': 
    Test().run() 

通知UsernamesessionIDappName資本必須在兩個你__init__()和你run()方法相同。

+0

唯一的問題是'sessionID' /'SessionID' –

+1

是真的。這種不一致困擾着我,但我應該具體說明解決問題的必要條件。回答編輯。 :) – RyanL