python空参数

时间:2010-02-03 17:58:55

标签: python arguments parameter-passing

如果没有参数传递给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 == ""行,我不知道如何表达:(

8 个答案:

答案 0 :(得分:21)

if len(sys.argv) == 1:
    # Print usage...

sys.argv的第一个元素始终是脚本本身的名称或空字符串。如果sys.argv只有一个元素,那么一定没有参数。

http://docs.python.org/library/sys.html#sys.argv

答案 1 :(得分:13)

if len(sys.argv)<2:

程序的名称始终位于sys.argv [0]

答案 2 :(得分:6)

正如其他人所说,你可以通过以下方式检查是否传递了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社区中预期和接受的命令行解析方法)。

答案 3 :(得分:4)

以下是解决问题的非常Pythonic方法,因为它故意在try中生成异常..除了:

import sys

try:   
   sys.argv[1:] // do something with sys.argv[1:]  
except IndexError:  
   print "usage is..."
   sys.exit()

答案 4 :(得分: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"

答案 5 :(得分: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"

答案 6 :(得分:1)

我建议你使用lib optparse [1],更优雅:D

[1]更强大的命令行选项解析器&lt; http://docs.python.org/library/optparse.html&gt;

答案 7 :(得分: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