繁体   English   中英

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

[英]passing array as command line argument to python script

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

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

如何正确传递数组?

不是python专家,但快速解决方案是使用json:

system "python2 /home/nish/stuff/repos/Untitled/voylla_staging_changes/app/models/ReviseItem.py #{sku.to_json} #{qtys.to_json}"

然后解析您的python脚本。

您需要找到一种合适的协议,以通过您选择的接口对数据(数组,列表等)进行编码(这是相当普遍的事实)。

在您的情况下,您选择了Unix进程调用机制作为接口,该机制仅允许在调用过程中传递字符串列表。 此列表也相当有限(您不能以这种方式传递1 GB的数据),因此您可能要考虑通过两个进程之间的管道传递数据。

无论如何,您所能做的就是传递字节,因此我建议对数据进行相应的编码,例如作为JSON字符串。 这意味着将您的Ruby数组编码为JSON,传输该JSON字符串,然后在Python端解码接收到的JSON字符串,以再次获得正确的Python列表。

这仅勾勒出其背后的方法和推理。

由于我不太会使用Ruby,因此我将把这一部分留给您(可能会看到@apneadiving的答案),但是在Python方面,您可以使用

import json

myList = json.loads(s)

一个JSON字符串转换s到Python的列表myList

"python2 /home/nish/stuff/repos/Untitled/voylla_staging_changes/app/models/ReviseItem.py \'#{sku}\' \'#{qtys}\'"

也许是这样的吗?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM