2015-11-06 92 views
1

我的要求是通過一個元組作爲命令行參數等傳遞一個元組作爲命令行參數

--data (1,2,3,4) 

我試圖使用​​模塊,但如果我通過這樣它正在接收的字符串'(1,2,3,4)' 。我嘗試給type=tupleargparse.add_argument,但在這裏沒用。

是否需要添加新的類型類並將其傳遞給參數add_argument

更新

我試過ast.literal_eval基於答案。感謝那。但它在結果中給出空格,如下所示。

(1,2,3,4) 
<type 'str'> 
(1, 2, 3, 4) 
<type 'tuple'> 
+1

每重複,'ast.literal_eval'是一個合適的'type'參數 – jonrsharpe

+0

根據'argparse'文檔,'type'必須是一個**函數**('callable'),它接受一個簡單的字符串並將其轉換爲所需的對象。 'tuple('(1,2)')'接受一個字符串,但是分成字符,例如'('(','1',',','2',')')'。還要注意你的用戶給你'--data(1,2,3,4)'。外殼在空白處分裂。 – hpaulj

+1

重複的鏈接與解析像''(1,2)''這樣的字符串有關,但不涉及問題的'argparse'一側。 – hpaulj

回答

-2

收到

ans = "(1, 2, 3)" 

你可以做以下的事情經過:

exec("tupAns = " + ans) 
print tupAns 
+0

無法執行上述代碼。它給語法錯誤。請儘量正確回答,而不是立即投票。 – user1423015

+0

我假設你已經收到了argparse的「(1,2,3)」。 –

+0

它工作正常。可能是「,」在ans的末尾給你造成了問題。現在試試看。 –

5

設置data說法nargsnargs="+"(意味着一個或多個)和類型int,你然後可以在命令行上設置這樣的參數:

--data 1 2 3 4 

args.data現在將列出[1, 2, 3, 4]

如果你必須有一個元組,你可以這樣做:

my_tuple = tuple(args.data) 

全部放在一起:

parser = argparse.ArgumentParser() 
parser.add_argument('--data', nargs='+', type=int) 
args = parser.parse_args() 
my_tuple = tuple(args.data) 
+0

對不起,這不是我的要求。請看我的問題一次。我知道這種方法。 – user1423015

+2

然後改變你的需求;)用戶不希望以特定的方式格式化它們的參數。然而,使用多個參數是正常的。 –

+0

阿拉斯泰爾,你是對的。最後我改變了我的要求:-)。 – user1423015