我从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"]
我觉得数组元素之间的空间将数组元素视为单独的参数。我可能错了。
如何正确传递数组?
答案 0 :(得分:3)
不是python专家,但快速解决方法是使用json:
system "python2 /home/nish/stuff/repos/Untitled/voylla_staging_changes/app/models/ReviseItem.py #{sku.to_json} #{qtys.to_json}"
然后解析你的python脚本。
答案 1 :(得分:3)
您需要找到一个合适的协议来对您选择的界面(您的阵列,列表等)进行编码(这非常普遍)。
在您的情况下,您已选择Unix进程调用机制作为接口,该机制仅允许在调用期间传递字符串列表。这个列表也相当有限(你不能以这种方式传递一个千兆字节),所以你可能想考虑通过这两个进程之间的管道传递数据。
无论如何,你所能做的就是传递字节,所以我建议相应地对你的数据进行编码,例如: G。作为JSON字符串。这意味着用JSON编码你的Ruby数组,传输那个JSON字符串,然后在Python端解码收到的JSON字符串,再次得到一个合适的Python列表。
这只是勾勒出背后的方法和推理。
由于我不熟悉Ruby,我会把这部分留给你(请参阅@ apneadiving的回答),但在Python方面你可以使用
import json
myList = json.loads(s)
将JSON字符串s
转换为Python列表myList
。
答案 2 :(得分:1)
"python2 /home/nish/stuff/repos/Untitled/voylla_staging_changes/app/models/ReviseItem.py \'#{sku}\' \'#{qtys}\'"
也许是这样的?