Python中带有可选参数的命令行选项

Python中带有可选参数的命令行选项,python,getopt,Python,Getopt,我想知道是否有一种简单的方法可以解析Python中具有可选参数的命令行选项。例如,我希望能够以两种方式调用脚本: > script.py --foo > script.py --foo=bar 从Python getopt文档中,我似乎必须选择其中一个。另外,请注意,标准库还有一个更强大的选项解析器。使用该包 查看argparse: 尤其是“nargs”选项OptPass中没有允许您执行此操作的选项。但您可以扩展它来实现: stdlib中的optparse模块不支持开箱即用(并且

我想知道是否有一种简单的方法可以解析Python中具有可选参数的命令行选项。例如,我希望能够以两种方式调用脚本:

> script.py --foo
> script.py --foo=bar

从Python getopt文档中,我似乎必须选择其中一个。

另外,请注意,标准库还有一个更强大的选项解析器。

使用该包

查看argparse:


尤其是“nargs”选项

OptPass中没有允许您执行此操作的选项。但您可以扩展它来实现:


stdlib中的optparse模块不支持开箱即用(并且不应该支持,因为以这种方式使用命令行选项是一种不好的做法)

正如您可以使用
argparse
模块一样(可通过
easy\u install argparse
安装或抓取并将其放在
sys.path
中的任何位置)

例子 输出 用法:script.py[-h][--foo[bar]] $script.py->foo=baz $script.py--foo->foo=None $script.py--foo-bar->foo=bar
optparse文档明确声明它不支持带有可选值的参数(有充分的理由)请参阅Triptych对Ned Batchelder答案的评论:optparse文档明确声明它不支持带有可选值的参数是否可以使用argparse,从而使“script.py--foo->foo=None”变为“script.py--foo->foo=baz"? 基本上,在我的例子中--foo与另一个标志--foo2是独占的,我希望--foo的值是可选的,如果它不存在,则使用默认值。@Ansis Atteka:据我所知,在您的例子中,
foo
foo2
必须存在,但不能同时存在。对吗?如果是这样,您可以改为使用命令:
script{foo[arg],foo2}
其中
arg
如果未设置,则默认为
'baz'
#!/usr/bin/env python
from argparse import ArgumentParser

if __name__ == "__main__":
    parser = ArgumentParser(prog='script.py')
    parser.add_argument('--foo', nargs='?', metavar='bar', default='baz')

    parser.print_usage()    
    for args in ([], ['--foo'], ['--foo', 'bar']):
        print "$ %s %s -> foo=%s" % (
            parser.prog, ' '.join(args).ljust(9), parser.parse_args(args).foo)
usage: script.py [-h] [--foo [bar]] $ script.py -> foo=baz $ script.py --foo -> foo=None $ script.py --foo bar -> foo=bar