19

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

4

8 回答 8

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

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

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

于 2010-02-03T18:02:36.097 回答
15
if len(sys.argv)<2:

程序的名称总是在 sys.argv[0]

于 2010-02-03T18:00:47.987 回答
6

您可以通过以下方式检查是否传入了任何参数:

#!/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"

但是,有一些称为argparseOptParse(现已弃用)的 Python 模块是专门为在运行脚本时解析命令行参数而开发的。我建议研究一下,因为它更“符合标准”(如,这是 Python 社区中预期和接受的命令行解析方法)。

于 2010-02-03T20:43:55.820 回答
5

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

import sys

try:   
   sys.argv[1:] // do something with sys.argv[1:]  
except IndexError:  
   print "usage is..."
   sys.exit()
于 2012-07-16T19:39:41.390 回答
2
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
于 2015-08-06T11:30:03.900 回答
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"
于 2010-02-03T18:03:01.893 回答
1

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

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

于 2010-02-04T02:10:19.400 回答
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"
于 2010-02-03T19:43:41.463 回答