Luy*_*ang 10 python python-3.x
我试图将数组传递给python
import sys
arr = sys.argv[1]
print(arr[2])
Run Code Online (Sandbox Code Playgroud)
我的命令是
python3 test.py [1,2,3,4,5] 0
Run Code Online (Sandbox Code Playgroud)
我希望结果呢
2
Run Code Online (Sandbox Code Playgroud)
但是,确实如此
,
Run Code Online (Sandbox Code Playgroud)
Bar*_*mar 19
argv字符串的元素,它们不像程序中的文字一样被解析.
你应该只传递一个以逗号分隔的字符串(不带括号):
python3 test.py 1,2,3,4,5 0
Run Code Online (Sandbox Code Playgroud)
然后用split()它将其转换为数组.
import sys
arr = sys.argv[1].split(',')
print(arr[2])
Run Code Online (Sandbox Code Playgroud)
命令行参数是字符串.甚至整数也必须从字符串转换为int.如果你使用你在你的例子中显示的列表语法,你需要通过某种解析器(你自己的解析器,来自ast,或者eval- 但不要使用eval)来运行参数.但是有一种更简单的方法:只需单独编写参数,并使用一个切片sys.argv作为列表.空间分隔参数是将多个参数传递给一个命令行程序(例如,多个文件名到标准方式less,rm等).
python3 test.py -n a b c 1 2 3
Run Code Online (Sandbox Code Playgroud)
首先,您要识别并跳过具有不同目的的参数(-n在上面的示例中),然后简单地保留其余参数:
arr = sys.argv[2:]
print(arr[3]) # Prints "1"
Run Code Online (Sandbox Code Playgroud)
PS.您还需要通过引用具有特殊含义的任何字符(*,;作为参数的一部分的空格等)来保护shell中的任何参数.但这是一个单独的问题.
| 归档时间: |
|
| 查看次数: |
20202 次 |
| 最近记录: |