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

如何在Bash脚本中获取Python脚本返回的列表?

在Bash脚本中获取Python返回的列表的方法

先拆解你遇到的两个核心问题:

1. 终端里的[1,2,3]来自哪里?

Python的exit()函数只能接受0-255之间的整数作为退出状态码,当你传入列表ret时,Python无法将其转换为有效状态码,会自动把列表的字符串表示[1,2,3]打印到标准错误流(stderr)。而你用$(...)捕获的是标准输出(stdout),所以这部分内容直接显示在终端,没有被存入out变量。

另外你Bash脚本里的echo $(out)是错误语法,正确写法是echo "$out"或echo "${out[@]}",但因为原Python脚本根本没往stdout输出内容,所以out变量是空的,自然没有输出。

2. 正确获取Python返回列表的方法

想要在Bash中获取Python的列表,需要让Python将列表内容输出到标准输出(stdout),再由Bash捕获并处理,以下是两种常用方案:

方案一:输出空格分隔的元素(适合简单无特殊字符的列表)

修改Python脚本test_return_list.py:

ret = [1, 2, 3]
# 将列表元素转为字符串后用空格拼接,输出到stdout
print(' '.join(map(str, ret)))

修改Bash脚本test_python_return_list.sh:

#!/bin/bash

echo "check return list from python"
# 捕获Python输出,自动按空格分割为Bash数组
out=($(python3 ./test_return_list.py))

echo "return from python script: "
# 打印整个数组
echo "${out[@]}"
# 也可以单独访问数组元素,比如第一个元素:${out[0]}

方案二:用JSON格式输出(适合含特殊字符或复杂结构的列表)

如果列表元素包含空格、引号等特殊字符,用JSON格式更稳妥,需要确保Bash环境安装了jq工具(多数Linux发行版可通过包管理器安装)。

修改Python脚本:

import json
ret = [1, 2, 3, "hello world"]
# 将列表转为JSON字符串输出
print(json.dumps(ret))

修改Bash脚本:

#!/bin/bash

echo "check return list from python"
# 捕获JSON格式的输出
json_out=$(python3 ./test_return_list.py)
# 用jq解析JSON,提取所有元素并转为Bash数组
out=($(echo "$json_out" | jq -r '.[]'))

echo "return from python script: "
echo "${out[@]}"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 07:20:35