如何通过argparse
处理多个输入,尤其是在有默认输入和可选输入的情况下?
在我的脚本file.py
中,用户必须输入两个参数,我在列表中
parameters_list = [parameter1, parameter2, parameter3]
parameter1 = "" # normally in the script, I would set these
parameter2 = ""
parameter3 = ""
第三个参数parameter3
是默认参数。
现在,在我看来,用户可以在运行时python file.py --parameters = 'parameter1', 'parameter2'
parser = argparse.ArgumentParser()
parser.add_argument('parameters', nargs = '*', help = 'input program parameters')
params = parser.parse_args()
然而
这并没有解析用户输入参数的方式,例如:
--parameters = 'parameter1', 'parameter2'
如何处理默认参数parameter3
?
目前,这会引发错误,因为变量parameter3
已在脚本中定义,但未由argparse
定义。
答案 0 :(得分:2)
一种方法是将参数解析为逗号分隔值。
import argparse
import sys
parser = argparse.ArgumentParser()
parser.add_argument('--parameters',nargs='*',help="input program parameters")
args,unknown = parser.parse_known_args()
if(unknown):
print("Do not use spaces!")
sys.exit()
parameters = args.parameters
parameters = parameters[0].split(',')
parameter1 = parameters[0]
parameter2 = parameters[1]
parameter3 = "your_value" if len(parameters) < 3 else params[2]
当然用户必须输入params为(无空格):
--parameters='parameter1','parameter2','parameter3'
另请注意,要使用--parameters
,您添加到解析器的参数必须匹配。
答案 1 :(得分:2)
我只想为每个参数定义单独的参数:
p = ArgumentParser()
p.add_argument("arg1")
p.add_argument("arg2")
p.add_argument("arg3", default=5, nargs='?')
并要求调用
$ python file.py 3 2
$ python file.py 3 2 6