【发布时间】:2009-09-22 18:53:11
【问题描述】:
我想知道是否有一种简单的方法来解析 Python 中具有可选参数的命令行选项。例如,我希望能够以两种方式调用脚本:
> script.py --foo
> script.py --foo=bar
从 Python getopt 文档看来,我必须选择其中一个。
【问题讨论】:
我想知道是否有一种简单的方法来解析 Python 中具有可选参数的命令行选项。例如,我希望能够以两种方式调用脚本:
> script.py --foo
> script.py --foo=bar
从 Python getopt 文档看来,我必须选择其中一个。
【问题讨论】:
optparse 来自 stdlib 的模块不支持开箱即用(不应该因为以这种方式使用命令行选项是一种不好的做法)。
作为@Kevin Horn pointed out,您可以使用argparse 模块(可通过easy_install argparse 安装,或者直接抓取argparse.py 并将其放在sys.path 的任何位置)。
#!/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)
【讨论】:
foo 或 foo2 必须出现在您的情况下,但不能同时出现。这是对的吗?如果是这样,您可以改用命令:script {foo [arg],foo2} 其中arg 如果未设置,则默认为'baz'。
另外,请注意标准库还有optparse,一个更强大的选项解析器。
【讨论】:
查看 argparse: http://code.google.com/p/argparse/
尤其是“nargs”选项
【讨论】:
optparse 中没有允许您执行此操作的选项。但是你可以扩展它来做到这一点:
http://docs.python.org/library/optparse.html#adding-new-actions
【讨论】:
使用optparse 包。
【讨论】: