0

我对 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”键中。

我究竟做错了什么 ?

干杯,

4

2 回答 2

1

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

如果您想存储单个项目cj和单个项目,c您可以执行以下操作:

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

如果你想要的是:

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

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

于 2012-10-30T01:08:38.110 回答
0

至少有两个问题:

  • 您使用位置参数(它们不以“-”或“--”开头),但您在命令行中提供它们的名称
  • 您使用nargs='*'它会消耗所有可以使用的参数
于 2012-10-30T01:08:55.007 回答