Python Argparse带有默认值的可选参数
不熟悉python和法语,因此对于任何英语错误,我深表歉意:)。 我正在做一些需要使用argparse的事情。 以下是我遇到问题的代码: mission.py 我试图找到一种方法,将n和file都设置为其他值,或者只设置其中的1。n为int,文件为str 下面是我希望使用以下命令获得的内容: python mission.py——创建2##预期结果>创建=[2,'world1.json'] python mission.py——创建world2.json#预期结果>创建=[1,'world2.json'] python mission.py——创建3 world2.json#预期结果>创建=[3,'world2.json'] 当使用--create时(无论是否指定n/file),我都需要使用列表作为参数启动一个函数 我尝试了多种方法,多次阅读了argparse文档,但找不到方法Python Argparse带有默认值的可选参数,python,argparse,Python,Argparse,不熟悉python和法语,因此对于任何英语错误,我深表歉意:)。 我正在做一些需要使用argparse的事情。 以下是我遇到问题的代码: mission.py 我试图找到一种方法,将n和file都设置为其他值,或者只设置其中的1。n为int,文件为str 下面是我希望使用以下命令获得的内容: python mission.py——创建2##预期结果>创建=[2,'world1.json'] python mission.py——创建world2.json#预期结果>创建=[1,'world2.j
感谢您的帮助。下面的代码返回所列用例的预期结果。我决定使用一个额外的函数来处理这个参数,因为程序必须接受int或字符串作为传递的第一个参数 在继续之前,我使用“try”块查看单个参数是否可以解析为int
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('--create n file', dest='create', nargs='+', default=(1,'world1.json'),
help='Create a party of n player with mission parameters in file')
args = parser.parse_args()
def get_n_file(arg):
if len(arg)==1:
try:
i = int(arg[0])
result = int(arg[0]), 'world'+str(arg[0])+'.json'
except:
s = arg[0]
result = 1, s
return result
elif len(arg)==2:
return int(arg[0]), arg[1]
print(args.create)
n, f = get_n_file(args.create)
print(n, f)
更改为
add_参数('--create',nargs='+')
。解析后,自己决定如何处理args.create
列表中的1个或多个字符串<代码>argparse未设置解码int和str类型的混合。为节省大量工作,请使用begins库@stevej,如何开始
对这个规范有帮助?如何将此需求表示为函数的参数?进一步考虑后,我认为我可以提出一个自定义的类型
函数和操作
类,它可以满足您的需要,甚至可以逐段替换默认值。但在解析之后进行转换也同样容易。为什么不这样做,然后我可以建议如何使它成为解析器的一部分?编辑我的问题,添加我的目标是使用的--创建@使用nargs='+'
的hpaulj无法满足我的需要。因为用户可以单独使用--create
来创建一个使用默认列表[1,'world1.json]的参与方。在那之后,你建议我做的就是在之后解码列表?
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('--create n file', dest='create', nargs='+', default=(1,'world1.json'),
help='Create a party of n player with mission parameters in file')
args = parser.parse_args()
def get_n_file(arg):
if len(arg)==1:
try:
i = int(arg[0])
result = int(arg[0]), 'world'+str(arg[0])+'.json'
except:
s = arg[0]
result = 1, s
return result
elif len(arg)==2:
return int(arg[0]), arg[1]
print(args.create)
n, f = get_n_file(args.create)
print(n, f)