我希望有一个可选参数,如果只有标志没有指定值,则默认为一个值,但是如果用户指定了值,则存储用户指定的值而不是默认值。是否已有针对此的行动?
一个例子:
python script.py --example
# args.example would equal a default value of 1
python script.py --example 2
# args.example would equal a default value of 2
我可以创建一个动作,但想看看是否有现成的方法。
答案 0 :(得分:215)
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('--example', nargs='?', const=1, type=int)
args = parser.parse_args()
print(args)
% test.py
Namespace(example=None)
% test.py --example
Namespace(example=1)
% test.py --example 2
Namespace(example=2)
nargs='?'
表示0或1个参数const=1
设置0参数type=int
将参数转换为int 如果您希望test.py
将example
设置为1,即使未指定--example
,也请添加default=1
。也就是说,用
parser.add_argument('--example', nargs='?', const=1, type=int, default=1)
然后
% test.py
Namespace(example=1)
答案 1 :(得分:8)
之间的区别:
parser.add_argument("--debug", help="Debug", nargs='?', type=int, const=1, default=7)
和
parser.add_argument("--debug", help="Debug", nargs='?', type=int, const=1)
因此是:
myscript.py
=>在第一种情况下,调试为7(默认情况下),在第二种情况下为“无”
myscript.py --debug
=>在每种情况下,调试均为1
myscript.py --debug 2
=>在每种情况下,调试均为2
答案 2 :(得分:5)
实际上,您只需要在default
脚本中使用add_argument
的参数test.py
:
import argparse
if __name__ == '__main__':
parser = argparse.ArgumentParser()
parser.add_argument('--example', default=1)
args = parser.parse_args()
print(args.example)
test.py --example
% 1
test.py --example 2
% 2
详细信息为here。