【发布时间】:2020-07-29 13:36:01
【问题描述】:
我有一个包含以下内容的 shell 脚本
$cat sample.sh
export greet="hello"
echo $greet
我有一个 python 脚本,我想在其中调用 bash 脚本并使用导出的环境变量。
$cat try.py
import os
os.system(". /tmp/sample.sh")
print("Greet from python : "+os.environ['greet'])
上面的脚本没有检索环境变量“greet”。也尝试使用子进程,但 env 变量在 python 中不可用。看起来它的外壳上下文相关。 https://www.shell-tips.com/bash/source-dot-command/ 有什么想法吗?
【问题讨论】:
-
只有父 shell 可以将变量导出到其子 shell,反之则不行。这里的 Python 是父级,为执行
. /tmp/sample.sh而创建的 shell 是子级。 -
@NullPointer :您必须以某种方式将环境变量的值传递给调用者。如果 stdout (作为建议的答案之一)不是一个选项,因为您需要 stdout 用于不同的目的,请将其写入文件并从 Python 读取该文件。为了使您的 shell 脚本更灵活地使用,您可以将文件名传递给它。顺便说一句,在您执行此操作时获取脚本(使用
.)在您的设置中没有意义,因为父级不是 bash。
标签: python bash shell subprocess