2

我有一个简单的 argparse 脚本,它需要两个参数;--encode--decode--decode如果没有给出参数,我想设为默认值。我该怎么做?

我要这个:

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

当我这样做时发生:

myscript.py "some encoded string here"

默认。

4

4 回答 4

3

查看python 文档,甚至是add 参数方法上的 default'store_true' action关键字

您需要实现一些逻辑,但这里的想法是:

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
于 2013-08-01T11:33:53.433 回答
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')
于 2013-08-01T12:42:56.517 回答
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 的解决方案很好,产生相同的命名空间。两个参数都写入相同的目标属性,默认情况下该属性是“解码”。

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"')

于 2013-08-02T01:59:26.097 回答
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)
于 2013-08-01T11:33:33.167 回答