python - 使用 Python 'export' 运行 'subprocess' 命令不起作用

标签 python bash shell command subprocess

subprocess.run('export FOO=BAR', shell=True)

这根本行不通,我不知道为什么。

我正在尝试做的是从我的 python (3.5.1) 脚本中设置一个环境变量,当我运行上面的行时,没有任何反应。没有报错,我自己检查环境变量,也没有设置。

其他带有 subprocess.run() 的 shell 命令 可以 工作,例如 lspwd,但是不是导出

.run() 是在 Python 3.5 中添加的(以防你不认识它),但我也尝试过使用 .call().Popen(),结果没有变化。

我知道我可以在 python 中使用 os.environ['FOO'] = "BAR" 设置环境变量,但我会在我的项目中大量使用 shell 命令,而且我希望我需要将多个命令串在一起,这将使使用 exportos.environ 更容易。

我的项目将在 Linux 上运行,这就是我的机器运行的平台。

最佳答案

它工作正常;但是,变量设置仅存在于子流程中。您不能影响子进程的本地进程环境。

os.environ 是正确的解决方案,因为它更改了本地进程的环境,并且这些更改将被以 subprocess.run 启动的任何进程继承。

您还可以使用 env 参数来运行:

subprocess.run(["cmdname", "arg1", "arg number 2"], env=dict(FOO='BAR', **os.environ))

这会在包含 FOO=BAR 的修改环境中运行命令,而不会修改当前环境。

关于python - 使用 Python 'export' 运行 'subprocess' 命令不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37275033/

相关文章:

Linux查找具有相似名称的文件并移动到新目录

python - python 中的水平堆叠条形图在 Jupyter Notebook 中提供多个图表

linux - 为什么sed会匹配组外的东西作为组的一部分?

linux - 如何处理引号,反引号特殊字符以在远程服务器中运行 linux bash shell 命令

linux - 如何编写脚本来执行git pull?

regex - 使用 POSIX BRE/ERE 正则表达式将 IP 地址提取为整个单词

linux - 需要帮助在 shell 中获得两个数字之间的差距

python - 超时调用 C 函数 - ctypes

python - 我可以在 Pygame 中播放声音并同时做其他事情吗?

python - 仅分配一次值的 defaultdict 变体