我想一個數組傳遞給蟒蛇如何傳遞數組通過命令行到Python
import sys
arr = sys.argv[1]
print(arr[2])
我的命令是
python3 test.py [1,2,3,4,5] 0
我希望結果是
2
但是,它是
,
我想一個數組傳遞給蟒蛇如何傳遞數組通過命令行到Python
import sys
arr = sys.argv[1]
print(arr[2])
我的命令是
python3 test.py [1,2,3,4,5] 0
我希望結果是
2
但是,它是
,
的argv
元素是字符串,他們不會像解析程序中的文字。
你應該只傳遞一個逗號分隔的字符串(不帶支架):
python3 test.py 1,2,3,4,5 0
,然後用split()
將其轉換爲一個數組。
import sys
arr = sys.argv[1].split(',')
print(arr[2])
命令行參數是字符串。即使整數必須從字符串轉換爲int
。如果你使用你在例子中顯示的列表語法,你需要通過某種解析器(你自己的解析器,從ast
或eval
- 但不使用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中的任何參數。但這是一個單獨的問題。
另一個相似的答案http://stackoverflow.com/questions/7605631/passing-a-list-to-python-from-command-line – mgilbert
'[1,2,3,4,5]'是一個文件名通配模式。它匹配任何名稱是1到5的單個字符或逗號的文件名。 – Barmar
如果您想將其用作腳本的文字參數,則需要將其放在引號中。 – Barmar