2010-02-03 57 views
15

如果沒有參數傳遞給python腳本,我該如何打印幫助信息?python空參數

#!/usr/bin/env python 

import sys 

for arg in sys.argv: 
    if arg == "do": 
     do this 
    if arg == "" 
     print "usage is bla bla bla" 

什麼,我缺少的是if arg == ""線,我不知道該如何表達:(

回答

11
if len(sys.argv)<2: 

程序的名稱總是sys.argv中[0]

+2

我剛纔所說的'== 1'但它是完全一樣的。 – 2010-02-03 18:01:39

1
#!/usr/bin/env python 

import sys 
args = sys.argv[1:] 

if args: 
    for arg in args: 
     if arg == "do": 
      # do this 
else: 
    print "usage is bla bla bla" 
+0

'if'後面跟'for'對我來說感覺有點多餘。我添加了你的答案的變體,以顯示我的意思 – 2010-02-03 19:44:37

1

基於Noctis Skytower塔的回答

import sys 
args = sys.argv[1:] 

for arg in args: 
    if arg == "do": 
     # do this 

if not args: 
    print "usage is bla bla bla" 
+0

你的第二個例子存在問題。如果你不想運行,你必須在進入'else'塊之前中斷。 – 2010-02-03 20:46:35

+0

@Noctis Skytower。是的,我會刪除它 – 2010-02-03 20:55:23

5

正如其他人所說,你可以檢查是否有任何ARGS被做傳遞:

#!/usr/bin/env python 

import sys 
args = sys.argv[1:] 

if args: 
    for arg in args: 
     if arg == "do": 
      # do this 
else: 
    print "usage is bla bla bla" 

然而,是一個名爲OptParse的Python模塊,它是爲了在運行時解析命令行參數而明確開發的一個腳本。我會建議看看這個,因爲它更符合「符合標準」(如在Python社區中的命令行解析的預期和接受方法)。

+1

「使用optparse」是非平凡程序的正確答案。 – 2010-02-03 20:49:13

4

下面是一個非常Python化解決方式的問題,因爲它故意產生的嘗試中一個異常..除了:

import sys 

try: 
    sys.argv[1:] // do sth with sys,argv[1:] 
except IndexError: 
    print "usage is..." 
    sys.exit() 
0
import argparse 

def parse_args(): 
    parser = argparse.ArgumentParser(
     add_help=True, 
    ) 

    # your arguments here 

    if len(sys.argv) == 1: 
     parser.print_help() 
     sys.exit(0) 
    else: 
     options = parser.parse_args() 

    return options