Skip to main content
 首页 » 编程设计

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

2025年05月04日14落叶

我正在从 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。