2012-10-30 35 views
0

加入说法我有这个小问题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']}

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

它返回这个:

{ 'CJ':[], 'C':[ 'CJ', '1']}

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

我做错了什么?

欢呼声,

+0

尝试交换“add_argument”行并查看响应中的更改。 – ronak

回答

1

你的问题是,*将匹配后,在于这一切。由于c参数有第一个*传入的所有内容都将以c结尾。

如果你想存储在cj单个项目和c一个项目,你可以这样做:

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

如果你想要的是:

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

这是因为+比赛一个参数。

0

至少有两个问题:

  • 您使用位置参数(不以“ - ”或“ - ”),但你在命令行提供他们的名字
  • 你使用nargs='*',它会消耗所有可能的参数