2012-10-30 33 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='*',它會消耗所有可能的參數