我有一个简单的argparse脚本,它带有两个参数; --encode
和--decode
。如果没有给出参数,我想使--decode
默认。我怎么能这样做?
我想要这个:
myscript.py --decode "some encoded string here"
当我这样做时发生:
myscript.py "some encoded string here"
默认情况下。
答案 0 :(得分:3)
查看python documentation上的'store_true' action
,甚至是default keyword on the add argument method
你需要实现一些逻辑,但这里的想法是:
parser.add_argument('--decode', rest_of_options..., default=True)
parser.add_argument('--encode', rest_of_options..., default=False)
values = parser.parse_args()
if values.decode:
do_some_stuff
elif values.encode:
do_some_other_stuff
答案 1 :(得分:0)
使用方法时在argparse.ArgumentParser()
对象中:add_argument
是一个标记default="some value"
,例如:
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('--test', nargs='?', const=1, type=int)
args = parser.parse_args()
print(args)
输出:
>python test.py
Namespace(test=None)
添加默认标志:
parser.add_argument('--test', nargs='?', const=1, type=int, default=2)
在add_argument更改之后:
>python test.py
Namespace(test=2)
答案 2 :(得分:0)
您可以使用default
参数指定默认值,并使用dest
来控制选项的变量名称:
import argparse
p = argparse.ArgumentParser()
# --decode and --encode are usually considered mutually exclusive; this enforces that constraint
g = p.add_mutually_exclusive_group()
# Order matters: the first default for a given dest is used
g.add_argument('--decode', dest='action', action='store_const', const='decode', default='decode')
g.add_argument('--encode', dest='action', action='store_const', const='encode')
答案 3 :(得分:0)
除了缺少的' - '
之外,这近似于你想要的p.add_argument('action',choices=['decode','encode'],default='decode',nargs='?')
p.add_argument('astring')
In [8]: p.parse_args(["a string"])
Out[8]: Namespace(action='decode', astring='a string')
In [9]: p.parse_args(['decode',"a string"])
Out[9]: Namespace(action='decode', astring='a string')
In [10]: p.parse_args(['encode',"a string"])
Out[10]: Namespace(action='encode', astring='a string')
如果你必须拥有' - ',nneonneo的解决方案就可以了,产生相同的命名空间。两个参数都写入相同的目标属性,默认情况下该属性为“decode”。
p.add_argument('--decode', dest='action', action='store_const', const='decode', default='decode')
p.add_argument('--encode', dest='action', action='store_const', const='encode')
如果您不使用互斥组,则最后一个参数将具有最终说法('--decode --encode "a string to be encoded"'
)