2013-01-15 51 views
-1

任何人都可以告訴我如何爲python腳本的參數編寫條件嗎?我想它打印「ARGUMENT2進入了」如果有第二個命令行運行參數,如:有條件的Python腳本參數

python script.py argument1 argument2 

,並打印「沒有第二個參數」如果不帶命令行參數運行,像這樣:

python script.py argument1 

這可能嗎?

+1

當然這是可能的。你有沒有嘗試過自己呢? –

+1

提示:'len(sys.argv)' –

+0

@Jimmy很簡單,python帶有電池,還有一個模塊,argparse。閱讀文檔。 –

回答

3
import sys 

if len(sys.argv)==2: # first entry in sys.argv is script itself... 
    print "No second argument" 
elif len(sys.argv)==3: 
    print "Second argument" 
1

接着塊應該是不言而喻的

$ ./first.py second third 4th 5th 
5 
$ cat first.py 
#!/usr/bin/env python 

import sys 

print (len(sys.argv)) 
+1

'len(sys.argv)-1'可能更合適,因爲如果沒有參數運行的腳本將返回1 –

2

有很多答案,這取決於你想要什麼做的,你是多大的靈活性,可能需要。

的最簡單的解決方案是檢查變量sys.argv,這是一個包含所有的命令行參數的列表。 (它還包含腳本的名稱作爲第一個元素。)要執行此操作,只需查看len(sys.argv)並根據其值更改行爲。

然而,這往往不是人們期待的命令行程序做的不夠靈活。例如,如果你想要一個標誌(-i--no-defaults,...),那麼如何編寫一個只有sys.argv並不明顯。同樣的論據(--dest-dir="downloads")。因此,人們寫了很多模塊來簡化這種參數解析。

內置的解決方案是​​,這是強大的,很容易使用的,但不是特別簡潔。

一個巧妙的解決方案是plac,它檢查main函數的簽名以試圖推斷命令行參數應該是什麼。

1

這是有關這取決於你在哪裏與此打算許多其他職位,所以我會放四個位置:

What's the best way to grab/parse command line arguments passed to a Python script?
​​
How can I process command line arguments in Python?
How do I format positional argument help using Python's optparse?

而是直接的答案從Python文檔你的問題:

sys.argv - 傳遞給Python腳本的命令行參數列表。 argv [0]是腳本名稱(與操作系統有關,無論這是否是完整的路徑名)。如果使用解釋器的-c命令行選項執行該命令,argv [0]被設置爲字符串'-c'。如果沒有腳本名稱被傳遞給Python解釋器,argv [0]是空字符串。 要循環訪問標準輸入或命令行上給出的文件列表,請參閱文件輸入模塊。