2016-04-28 67 views
2

我想一個數組傳遞給蟒蛇如何傳遞數組通過命令行到Python

import sys 
arr = sys.argv[1] 
print(arr[2]) 

我的命令是

python3 test.py [1,2,3,4,5] 0 

我希望結果是

2 

但是,它是

, 
+0

另一個相似的答案http://stackoverflow.com/questions/7605631/passing-a-list-to-python-from-command-line – mgilbert

+0

'[1,2,3,4,5]'是一個文件名通配模式。它匹配任何名稱是1到5的單個字符或逗號的文件名。 – Barmar

+0

如果您想將其用作腳本的文字參數,則需要將其放在引號中。 – Barmar

回答

5

argv元素是字符串,他們不會像解析程序中的文字。

你應該只傳遞一個逗號分隔的字符串(不帶支架):

python3 test.py 1,2,3,4,5 0 

,然後用split()將其轉換爲一個數組。

import sys 
arr = sys.argv[1].split(',') 
print(arr[2]) 
-1

你有錯指標,嘗試3: 打印(ARR [3])

+2

'arr'是一個字符串,而不是一個數組。更正索引不會解決它。 – Barmar

4

命令行參數是字符串。即使整數必須從字符串轉換爲int。如果你使用你在例子中顯示的列表語法,你需要通過某種解析器(你自己的解析器,從asteval - 但不使用eval)運行參數。但是有一種更簡單的方法:只需單獨寫出參數,然後使用一段sys.argv作爲列表。空格分隔參數是將多個參數傳遞給命令行程序的標準方法(例如,多個文件名到less,rm等)。

python3 test.py -n a b c 1 2 3 

首先,你要確定並跳過具有不同目的(-n在上面的例子)參數,然後簡單地保持休息:

arr = sys.argv[2:] 
print(arr[3]) # Prints "1" 

PS。您還需要通過引用具有特殊含義的任何字符(*,;,作爲參數的一部分的空格等)來保護shell中的任何參數。但這是一個單獨的問題。

+1

你會得到建議'eval'的downvotes ... – nekomatic

+0

嗯,我不完全......但你說得對,謝謝你的警告:-) – alexis

+1

@nekomatic這只是'邪惡' –

相關問題