我正在尝试将数组传递给python
import sys
arr = sys.argv[1]
print(arr[2])
我的命令是
python3 test.py [1,2,3,4,5] 0
我希望结果呢
2
然而,它是
,
答案 0 :(得分:18)
argv
的元素是字符串,它们不像程序中的文字那样被解析。
你应该只传递逗号分隔的字符串(不带括号):
python3 test.py 1,2,3,4,5 0
然后使用split()
将其转换为数组。
import sys
arr = sys.argv[1].split(',')
print(arr[2])
答案 1 :(得分:6)
命令行参数是字符串。甚至整数也必须从字符串转换为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中的任何参数。但这是一个单独的问题。