python argparse带可检测开关的可选位置参数

时间:2013-06-24 08:02:50

标签: python argparse

我想像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的值为10;如果我指定None而没有值,则为-s。如果没有给出切换,我想要的是args.s等于None,并且args.s设置为默认值且-s给定,args.s等于{ {1}}如果以custom_value运行。我怎么能做到这一点?

1 个答案:

答案 0 :(得分: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)