我正在从 ruby 程序调用 python 脚本:
sku = ["VLJAI20225", "VJLS1234"]
qty = ["3", "7"]
system "python2 /home/nish/stuff/repos/Untitled/voylla_staging_changes/app/models/ReviseItem.py #{sku} #{qtys}"
但我想访问 python 脚本中的数组元素。
print sys.argv[1]
#gives [VLJAI20225, expected ["VLJAI20225", "VJLS1234"]
print sys.argv[2]
#gives VJLS1234] expected ["3", "7"]
我感觉数组元素之间的空格是把数组元素当成单独的参数。我可能是错的。
如何正确传递数组?
请您参考如下方法:
您需要找到一个合适的协议(protocol)来通过您选择的接口(interface)对您的数据(您的数组、列表等)进行编码(这是非常普遍的)。
在您的情况下,您已选择 Unix 进程调用机制作为接口(interface),该机制只允许在调用期间传递字符串列表。此列表也相当有限(您不能通过这种方式传递 1 GB),因此您可能需要考虑通过两个进程之间的管道传递数据。
无论如何,你所能做的就是传递字节,所以我建议相应地对你的数据进行编码,e。 G。作为 JSON 字符串。这意味着用 JSON 编码您的 Ruby 数组,传输该 JSON 字符串,然后在 Python 端解码接收到的 JSON 字符串以再次获得正确的 Python 列表。
这只是概述了其背后的方法和推理。
由于我不精通 Ruby,所以我会把那部分留给你(可能请参阅@apneadiving 的回答),但在 Python 方面你可以使用
import json
myList = json.loads(s)
将 JSON 字符串 s 转换为 Python 列表 myList。
