2010-11-15 117 views
14

我可以把我的腳本是這樣的:如何檢查命令行中的參數是否已設置?

python D:\myscript.py 60 

而在腳本中,我可以這樣做:

arg = sys.argv[1] 
foo(arg) 

但我怎麼能測試該說法在命令行調用中輸入?我需要做這樣的事情:

if isset(sys.argv[1]): 
    foo(sys.argv[1]) 
else: 
    print "You must set argument!!!" 
+0

檢查的argv [1]爲null,更安全的方式,對不起,我認爲這是暗示我說的是參數1 – Jim 2010-11-15 20:27:13

+1

@ Jim'sys.argv'不爲空,它至少包含腳本的名稱,如'sys.argv [0]' – khachik 2010-11-15 20:29:23

回答

31

不要使用sys.argv來處理命令行界面;有一個模塊可以做到這一點:argparse

您可以通過將required=True傳遞給add_argument來標記參數。

import argparse 
parser = argparse.ArgumentParser(description='Process some integers.') 
parser.add_argument("foo", ..., required=True) 
parser.parse_args() 
+6

+1,因爲argparse太棒了。 – GWW 2010-11-15 20:29:34

+3

如果需求非常簡單,使用'sys.argv'實際上是否有錯誤*? – Jonik 2010-11-15 20:30:42

+0

這個問題很好的解決方案! – Jim 2010-11-15 20:31:26

-7

if(sys.argv[1]):應該可以正常工作,如果沒有參數sys.argv中[1]將是(應該是)空

+0

如果未設置該值,那麼這將給列表索引超出界限錯誤。 – GWW 2010-11-15 20:28:34

+0

它會跌落'IndexError' – khachik 2010-11-15 20:28:39

+4

沒有,這是行不通的,因爲索引超出範圍。 – 2010-11-15 20:28:39

19
if len(sys.argv) < 2: 
    print "You must set argument!!!" 
5

如果您使用的是Python 2.7/3.2,請使用argparse模塊。否則,請使用optparse模塊。該模塊負責解析命令行,並且可以檢查位置參數的數目是否與您期望的相符。

0

我用optparse module對於這一點,但我猜是因爲我使用2.5可以使用argparse亞歷克斯建議,如果你使用的是2.7或更高

0
for arg in sys.argv: 
    print (arg) 
    #print cli arguments 

你可以用它來存儲在列表中的參數和使用他們。是不是他們使用像這樣的sys.argv[n]

沒有問題,如果沒有給出參數