2013-10-15 55 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:]) 

這個問題似乎是在對於opt,arg在opts:loop中,因爲命令行參數不會被放入selectclass和selectterm中,但語法對我來說看起來是正確的。這些值存在於argv數組中,當我打印arg和opt時,會在循環中彈出。

+0

代碼意圖不正確,這意味着您的代碼塊可能會以不同於您的預期的地方結束。請張貼正確的縮進代碼。 –

+0

格式化固定 –

回答

1

你要放一個等號你長OPTS結束,表明你希望他們採取的值 - 例如,["class=", "term="]

其次,選擇返回包括前綴破折號(ES )。例如,

... 
if opt in ("-c", "--class"): 
    ...