2013-10-15 2 views
0

Я сделал некоторые отладки и возникают некоторые проблемы, трассировка, почему аргументы командной строки не подхватили должным образом в следующем коде:Python Аргументы команда заблудились

def ensure_dir(f): 
    d = os.path.dirname(f) 
    if not os.path.exists(d): 
    os.makedirs(d) 

def main(argv): 
    files = ["assignments", "examples", "exams", "lecture_notes", "submissions"] 

    selectterm = "" 
    selectclass = "" 
    try: 
     opts, args = getopt.getopt(argv, "c:t:", ["class","term"]) 
    except getopt.GetoptError as e: 
     print 'Question2.py -c <class> -t <term>' 
     system.exit(2) 
    for opt, arg in opts: 
     print arg 
     print opt 
     if opt in ("c", "class"): 
      selectclass = arg 
     if opt in ("t", "term"): 
      selectterm = arg 


    print selectclass 
    print selectterm 
    filename = selectterm + "/" + selectclass + "/src/" 

    for x in files: 
     directory = str(filename + x +"/") 
     ensure_dir(directory) 
     print directory 
    symblink = "/usr/local/classes/eecs/" + selectterm + "/" + selectclass + "/src/README" 
    os.symlink(symblink, "README") 





if __name__ == "__main__": 
    main(sys.argv[1:]) 

Проблема, кажется, в for opt, arg в opts: loop, поскольку аргументы командной строки никогда не попадают в selectclass и selectterm, но синтаксис выглядит корректно для меня. Значения присутствуют в массиве argv и появляются в цикле, когда я печатаю arg и opt.

+0

Код не предназначен должным образом, что означает, что ваши блоки могут заканчиваться в разных местах, чем вы ожидаете. Пожалуйста, разместите правильно отложенный код. –

+0

форматирование исправлено –

ответ

1

Вы хотите, чтобы поставить знак равенства в конце ваших длинных ОПТС, чтобы показать, что вы ожидаете, что они принимают значение - например, ["class=", "term="]

Во-вторых, неавтоматического возвращается включает префикс дефис (эс). например,

... 
if opt in ("-c", "--class"): 
    ... 
Смежные вопросы