用argparse添加参数

时间:2012-10-30 00:50:56

标签: python argparse

我对argparse有这个小问题:

#!/usr/bin/python2.6
#test.py
import argparse

parser = argparse.ArgumentParser(description="test")
parser.add_argument('c', nargs='*')
parser.add_argument('cj', nargs='*')

results = vars(parser.parse_args())
print results

现在在命令行中输入:“test.py c 1”

它返回此

  

{'cj':[],'c':['c','1']}

但如果我输入“”test.py cj 1“

它返回:

  

{'cj':[],'c':['cj','1']}

我期待第二个例子在'cj'键中返回值,但它会一直显示在'c'键中。

我做错了什么?

欢呼声,

2 个答案:

答案 0 :(得分:1)

您的问题是*将匹配其后的所有内容。由于c参数具有第一个*,因此传入的所有内容都将以c结尾。

如果您要在cj中存储单个项目,在c中存储单个项目,则可以执行以下操作:

parser = argparse.ArgumentParser(description="test")
parser.add_argument('c', nargs='+')
parser.add_argument('cj', nargs='+')

如果你想要的是:

{'cj': ['1'], 'c': ['cj']}

这是因为+匹配单个参数。

答案 1 :(得分:0)

至少有两个问题:

  • 你使用位置参数(它们不是以' - '或' - '开头),而是你在命令行提供它们的名字
  • 你使用nargs='*'消耗它可以
  • 的所有参数