【发布时间】:2012-06-21 20:40:08
【问题描述】:
我希望能够为我的程序指定一个既作为标志又作为变量的选项。例如: 我有一个名为“--logging”的论点。如果未指定此参数,我希望将其设置为 false(即 action='store_true'),但如果指定了参数,我想做两件事。 1)我想设置默认路径“./log_file.log”和 2)我想允许用户指定不同的日志文件位置。
【问题讨论】:
我希望能够为我的程序指定一个既作为标志又作为变量的选项。例如: 我有一个名为“--logging”的论点。如果未指定此参数,我希望将其设置为 false(即 action='store_true'),但如果指定了参数,我想做两件事。 1)我想设置默认路径“./log_file.log”和 2)我想允许用户指定不同的日志文件位置。
【问题讨论】:
好的,所以我想出了我自己的解决方案。它依赖于nargs。首先是代码:
#!/usr/bin/python
# example.py
import argparse
parser = argparse.ArgumentParser(description="Example of a single flag acting as a boolean and an option.")
parser.add_argument('--foo', nargs='?', const="bar", default=False)
args = parser.parse_args()
if args.foo:
print args.foo
else:
print "Using the default, boolean False."
鉴于这个例子,当我们在三种可能的情况下使用它时会发生以下情况:
> ./example.py
Using the default, boolean False.
> ./example.py --foo
bar
> ./example.py --foo baz
baz
希望以上内容是不言自明的。如果不是,那是怎么回事 nargs='?'如果未指定标志,将使用“默认”值(在我们的例子中为布尔值 False),如果标志不带参数指定,则使用 const 值,如果标志带参数指定,则使用参数。注意不要在 False 周围加上任何引号; False 是内置类型(布尔值),“False”或“False”将评估为 true。
【讨论】:
是的,没有问题。你可以使用优秀的PyMOTW about argparse中解释的这个表格
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('--logging', action='store_true', default=False,
dest='logging_on',
help='Activate the logging')
results = parser.parse_args()
您可以稍后在代码中使用 logging_on 来测试和输出值(将其替换为对您有意义的值)。您还可以使用配置文件或/和文件日志路径的参数。
【讨论】: