将数组作为命令行参数传递给python脚本

时间:2013-12-13 10:19:48

标签: python ruby-on-rails

我从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"]

我觉得数组元素之间的空间将数组元素视为单独的参数。我可能错了。

如何正确传递数组?

3 个答案:

答案 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}\'"

也许是这样的?

相关问题