1

我想调用我的程序,例如program -s <optional value>. 我想分配一个默认值,但也希望能够检测是否-s给出了开关。是)我有的:

max_entries_shown = 10
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("-s",
    nargs = '?',
    default = max_entries_shown)
args = parser.parse_args()

args.s如果我不在-s命令行上给出,并且None我没有指定值,这会给我一个 10-s的值。我想要的args.s等于None如果没有给定开关,并args.s设置为给定的默认值-s,并且args.s等于custom_valueif run as program -s custom_value。我怎样才能做到这一点?

4

1 回答 1

2

您必须使用const而不是default. 引用自 argparse Python Docs 关于何时使用const的内容:

当使用选项字符串(如 -f 或 --foo)和 nargs='?' 调用 add_argument() 时。这将创建一个可选参数,后面可以跟零个或一个命令行参数。解析命令行时,如果遇到选项字符串后没有命令行参数,则将假定 const 的值。有关示例,请参见 nargs 描述。

此外,我添加了一个,type=int因为我假设您希望将输入视为 int。

所以,你的代码应该是:

max_entries_shown = 10
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("-s",
    nargs = '?',
    const = max_entries_shown,
    type=int)
args = parser.parse_args()

此代码返回(带有打印参数)

$ python parse.py
Namespace(s=None)
$ python parse.py -s
Namespace(s=10)
$ python parse.py -s 12
Namespace(s=12)
于 2013-06-24T09:37:31.617 回答