【问题标题】:How to pass an array to python through command line [duplicate]如何通过命令行将数组传递给python [重复]
【发布时间】:2016-04-29 06:21:46
【问题描述】:

我正在尝试将数组传递给 python

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

我的命令是

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

希望结果吧

2

不过是

,

【问题讨论】:

  • 另一个类似的答案stackoverflow.com/questions/7605631/…
  • [1,2,3,4,5] 是一种文件名通配模式。它匹配名称为 1 到 5 或逗号的单个字符的任何文件名。
  • 如果你想用它作为脚本的文字参数,你需要把它放在引号里。

标签: python python-3.x


【解决方案1】:

argv 的元素是字符串,它们不像程序中的文字那样被解析。

你应该只传递一个逗号分隔的字符串(不带括号):

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

然后使用split() 将其转换为数组。

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

【讨论】:

  • 很好的答案。只是想补充一点,如果您想将列表用作数组,您可以将其转换为: arr = sys.argv[1].split(',') ; arr = np.array([float(i) for i in arr])
【解决方案2】:

命令行参数是字符串。甚至整数也必须从字符串转换为int。如果您使用示例中显示的列表语法,则需要通过某种解析器运行参数(您自己的解析器,来自asteval--但不要使用eval )。但是有一个更简单的方法:只需单独编写参数,并使用sys.argv 的一部分作为您的列表。空格分隔的参数是将多个参数传递给命令行程序的标准方式(例如,将多个文件名传递给 lessrm 等)。

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

首先,您要识别并跳过具有不同目的的参数(上例中的-n),然后简单地保留其余的:

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

PS。您还需要通过引用任何具有特殊含义的字符(*;、作为参数一部分的空格等)来保护 shell 的任何参数。但这是一个单独的问题。

【讨论】:

  • 你会因为建议eval而被否决...
  • 嗯,我不完全是......但你是对的,谢谢你的警告:-)
  • @nekomatic 那只是evil
猜你喜欢
  • 2018-10-16
  • 2012-10-04
  • 2019-12-07
  • 1970-01-01
  • 1970-01-01
  • 2020-07-02
  • 1970-01-01
  • 1970-01-01
  • 2018-01-11
相关资源
最近更新 更多