在 Python 中处理命令行参数

Handling command-line arguments in Python

我正在尝试从命令行获取参数来初始化以下class

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()

请注意 UsernamesessionIDappName 的大小写在您的 __init__()run() 方法中必须相同。