如何让调用Python脚本的Bash脚本获取Python设置的变量?
解决Bash脚本向Python传递变量的问题
你猜的没错!Bash父进程和它启动的Python子进程确实拥有独立的运行环境——子进程会继承父进程的环境变量,但子进程对环境的修改不会反向影响父进程,而且如果父进程没把变量明确导出,子进程根本看不到它。
下面给你两种靠谱的实现方式:
方法1:导出Bash变量到全局环境
在Bash脚本里先把变量用export命令导出,这样后续启动的Python进程就能继承到这个环境变量:
Bash脚本示例(比如叫run_python.sh)
# 定义变量并导出到环境 export VarFromFirstScript="Hello from Bash!" # 调用你的Python脚本 python3 myPythonScript.py
Python脚本(myPythonScript.py)读取变量
import os # 安全读取环境变量(用get避免变量不存在时抛出KeyError) var_value = os.environ.get('VarFromFirstScript') if var_value: print(f"成功获取Bash传递的变量:{var_value}") else: print("未找到VarFromFirstScript环境变量")
方法2:临时传递环境变量(不污染全局环境)
如果不想把变量导出到整个Bash会话的环境里,可以在调用Python的命令行前临时设置变量,这种方式只对当前Python进程生效:
Bash脚本示例
# 临时设置变量并启动Python,仅本次命令有效 VarFromFirstScript="临时传递的变量值" python3 myPythonScript.py
Python脚本的读取方式和方法1完全一样,不用修改。
为什么你之前的方法没生效?
你尝试在Python里执行os.environ['VarFromFirstScript'] = VarFromFirstScript,这里有两个核心问题:
- 如果Bash里没导出这个变量,Python进程的环境里根本没有
VarFromFirstScript,直接赋值只是在Python自己的环境里新增了一个变量,和Bash完全无关; - 就算你在Python里修改了环境变量,也只会影响Python进程本身,不会回传给父Bash进程——进程间的环境是单向继承的,子进程无法修改父进程的环境。
内容的提问来源于stack exchange,提问作者RSHAP
相关产品推荐
相关产品推荐

