2017-08-10 108 views
0

我想報價各地「ARG1」「ARG2」被視爲單獨的參數不在同一個列表和「ARG1 ARG2」作爲獨立參數,但在同樣的名單。從herePython的argparse - 用引號

import argparse 
parser = argparse.ArgumentParser() 
parser.add_argument('--nargs', nargs='*') 

for _, value in parser.parse_args()._get_kwargs(): 
    if value is not None: 
    print(value) 

運行1

python test.py --nargs "arg arg2" 

輸出1

['arg arg2'] 

採取

test.py我想這是好?但是,arg和arg2是否被視爲單獨的論點?

運行2

python test.py --nargs "arg" "arg2" 

輸出2

['arg', 'arg2'] 

在同一個列表,但它們視爲單獨的參數呢?我需要他們是這樣的:

['arg'] ['arg2'] 
+2

但你爲什麼要它? :) – Roelant

+4

你的shell決定如何分隔參數,而不是python。大多數shell會認爲''arg arg2''是一個單獨的參數,並將它傳遞給python。如果你想把這些單詞分隔成不同的參數,你必須用通常的方法來完成它(例如'str.split()')。 – glibdud

+0

@Roelant格式:'arg1''arg2'應該是兩個分開的行中的兩個單獨的參數,而'arg1 arg2'應該是同一行中的兩個單獨的參數。 – Bryn

回答

1

python test.py --nargs "arg arg2"給解析器(通過sys.argv[1:]['--nargs', 'arg arg2']。解析器將該參數字符串'arg arg2'放入args命名空間。因爲nargs='*'它被放在一個列表中。

所以args = parser.parse_args()應該產生

Namespace(nargs = ['arg arg2']) 

python test.py --nargs "arg" "arg2"不同之處僅在於外殼拆分2串,['--nargs', 'arg'. 'arg2'],解析器把雙雙進入該名單。

它通常有助於打印sys.argv以查看解析器必須使用的內容。

要獲得['arg'] ['arg2']我認爲你必須使用

parser.add_argument('--nargs', nargs='*', action='append') 

python test.py --nargs "arg" --nargs "arg2" 

隨着每個--nargs出現它的參數創建一個列表(因爲*的),並追加那名字空間屬性。其實它會產生一個列表清單:

[['arg'], ['arg2']] 
+0

謝謝。我不想要列表清單。看起來像str.split())就足夠了。知道如何在parser.add_argument(' - nargs',nargs ='*')中實現它? – Bryn

+0

我只會在解析後使用列表理解。 – hpaulj