2010-02-03 33 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