处理在Python命令行参数
问题描述:
我试图得到的命令行参数初始化下面的类处理在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'.
我想知道为什么?任何帮助表示赞赏。
答
这是变量命名不一致的问题。如果大写的问题是固定的,代码按预期工作:
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()
通知Username
,sessionID
和appName
资本必须在两个你__init__()
和你run()
方法相同。
+0
唯一的问题是'sessionID' /'SessionID' –
+1
是真的。这种不一致困扰着我,但我应该具体说明解决问题的必要条件。回答编辑。 :) – RyanL
如果item.startswith(“ - 用户名”)''只有'self.Username''。否则不设置。 –
此问题与处理命令行参数无关。 –
也许你遇到过一些案例问题?有sessionID和SessionID,除此之外,一切都适合我。 – danielfranca