2016-01-06 2 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

Он будет иметь только «self.Username», если item.startswith («- 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() 

Обратите внимание на капитализацию Username, sessionID и appName должны быть одинаковыми в обоих ваших __init__() и ваших run() методов.

+0

Единственная проблема была в 'sessionID' /' SessionID' –

+1

True. Несоответствие беспокоило меня, но я должен быть конкретным в том, что необходимо для решения проблемы. Ответ отредактирован. :) – RyanL