【发布时间】:2017-11-28 22:58:43
【问题描述】:
python 和法语新手,对于任何英语错误,我们深表歉意 :)。 我正在做一些我需要使用 argparse 的事情。 这是我遇到问题的代码:
mission.py
parser = argparse.ArgumentParser()
parser.add_argument('--create n file', dest='create', nargs=2,
default=(1,'world1.json'), help='Create a party of n player with mission parameters in file')
我正在尝试找到一种方法将 n 和 file 都设置为其他值,或者只设置其中一个。 n 是 int,file 是 str。
这是我想使用以下命令获得的:
pythonmission.py --create 2 ##expected result > create = [2,'world1.json']
pythonmission.py --create world2.json #expected result > create = [1,'world2.json']
pythonmission.py --create 3 world2.json #预期结果 > create = [3,'world2.json']
当使用 --create 时(有或没有指定 n/file),我需要使用列表作为参数来启动一个函数。
我尝试了多种方法并多次阅读 argparse 文档,但找不到方法。
感谢您的帮助。
【问题讨论】:
-
更改为
add_argument('--create', nargs='+')。解析后自行决定如何处理args.create列表中的 1 个或多个字符串。argparse未设置解码 int 和 str 类型的混合。 -
节省大量工作,使用开始库。 pypi.python.org/pypi/begins/0.9
-
@stevej,
begins对这个规范有何帮助?你如何将这个要求表达为函数的参数? -
进一步考虑,我想我可以想出一个自定义的
type函数和Action类来满足你的需求,甚至可以零碎地替换默认值。但是在解析后进行转换同样容易。你为什么不这样做,然后我可以建议如何使它成为解析器的一部分? -
编辑了我的问题以添加我的目标是使用--create。 @hpaulj 使用
nargs='+'不能满足我的需要。由于用户可以单独使用--create来使用默认列表 [1, 'world1.json] 进行聚会。之后你建议我做的就是在之后解码列表?