You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过subprocess.run获取Python脚本的列表类型输出而非字节串

解决方法

方法1:用ast.literal_eval()解析(推荐,安全)

这是处理Python字面量最安全的方式,只会解析合法的Python数据结构,不会执行恶意代码。

步骤:

  • 把捕获的字节串解码成字符串,去掉末尾的换行符
  • 用ast.literal_eval()把字符串转成嵌套列表

示例代码:

import subprocess
import ast

# 调用random.py并捕获输出
result = subprocess.run(['python', 'random.py'], capture_output=True, text=True)
# 清理输出内容,去掉首尾空白(包括换行)
output_str = result.stdout.strip()
# 解析为原始嵌套列表
target_list = ast.literal_eval(output_str)

print(type(target_list))  # 输出 <class 'list'>
print(target_list)        # 输出 [[1, 2, 'bob'], [1, 2, 'eric'], [2, 1, 'dimitar'], [2, 2, 'kyle']]

方法2:用eval()(不推荐,有风险)

eval()能直接解析字符串为Python对象,但它会执行任意代码,如果输出内容不可信(比如来自外部输入),很容易引发安全问题,仅在你完全可控输出内容时使用。

示例代码:

import subprocess

result = subprocess.run(['python', 'random.py'], capture_output=True, text=True)
output_str = result.stdout.strip()
target_list = eval(output_str)

print(type(target_list))
print(target_list)

更规范的方式:用JSON传递数据

如果是你自己编写的两个脚本,更建议用JSON做数据序列化,兼容性更好,跨语言也能用:

  1. 修改random.py,输出JSON格式字符串:
import json

l1 = [[1, 2, 'bob'], [1, 2, 'eric'], [2, 1, 'dimitar'], [2, 2, 'kyle']]
print(json.dumps(l1))
  1. 在调用脚本中解析JSON:
import subprocess
import json

result = subprocess.run(['python', 'random.py'], capture_output=True, text=True)
output_str = result.stdout.strip()
target_list = json.loads(output_str)

print(type(target_list))
print(target_list)

内容的提问来源于stack exchange,提问作者mansu kim

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 10:05:23