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

如何从Python调用Shell脚本并获取其导出的环境变量?

解决Python调用Bash脚本后获取环境变量的问题

因为Bash脚本作为Python启动的子进程,其导出的环境变量仅存在于子进程生命周期中,无法直接传递到父进程(Python)。以下是几种可行的解决方法:

方法一:通过Bash输出全部环境变量,Python解析后导入

利用source执行脚本后,通过env命令输出当前环境的所有变量,再让Python捕获输出并解析到自身的环境变量中。

示例Python代码:

import subprocess
import os

# 执行脚本并获取环境变量列表
env_output = subprocess.check_output(
    ["bash", "-c", "source myscript.sh && env"],
    text=True
)

# 解析每一行的环境变量,注入到Python进程的环境中
for line in env_output.splitlines():
    if "=" in line:
        key, val = line.split("=", 1)
        os.environ[key] = val

# 测试是否获取到目标变量
print(os.environ.get("TARGET_VAR"))

方法二:修改Bash脚本,仅输出需要的环境变量

如果不需要全部环境变量,可以修改myscript.sh,在末尾专门输出你需要的变量(避免解析大量无关内容):

修改后的myscript.sh末尾:

# 原脚本的导出命令
export TARGET_VAR="some_value"
# 添加输出命令,格式为 KEY=VALUE
echo "TARGET_VAR=$TARGET_VAR"

对应的Python代码:

import subprocess
import os

# 调用脚本并捕获输出
script_output = subprocess.check_output(["./myscript.sh"], text=True)

# 提取目标变量
for line in script_output.splitlines():
    if line.startswith("TARGET_VAR="):
        key, val = line.split("=", 1)
        os.environ[key] = val

print(os.environ["TARGET_VAR"])

方法三:直接获取单个目标变量的值

如果已经明确知道要获取的变量名,可以直接让Bash执行脚本后输出该变量的值,再在Python中直接设置:

import subprocess
import os

# 执行脚本后直接输出目标变量的值
var_value = subprocess.check_output(
    ["bash", "-c", "source myscript.sh && echo $TARGET_VAR"],
    text=True
).strip()

# 将变量注入Python环境
os.environ["TARGET_VAR"] = var_value

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 14:55:30