我想像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
运行。我怎么能做到这一点?
答案 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)