如果没有参数传递,如何使参数默认?

时间:2013-08-01 11:21:47

标签: python argparse

我有一个简单的argparse脚本,它带有两个参数; --encode--decode。如果没有给出参数,我想使--decode默认。我怎么能这样做?

我想要这个:

myscript.py --decode "some encoded string here"

当我这样做时发生:

myscript.py "some encoded string here"

默认情况下。

4 个答案:

答案 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"'