如何使用argparse设置多个变量,包括必需变量和可选变量?

时间:2016-10-12 16:36:52

标签: python argparse optional

如何通过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()

然而

  1. 这并没有解析用户输入参数的方式,例如:

    --parameters = 'parameter1', 'parameter2'

  2. 如何处理默认参数parameter3

    目前,这会引发错误,因为变量parameter3已在脚本中定义,但未由argparse定义。

2 个答案:

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