【问题标题】:How can I import the enviroment variables of a completed process in python?如何在 python 中导入已完成进程的环境变量?
【发布时间】:2010-06-24 10:07:36
【问题描述】:

我需要编写一个 python 脚本来启动一个 shell 脚本并在脚本完成后导入环境变量。

想象一下你有一个shell脚本“a.sh”:

export MYVAR="test"

在python中我想做类似的事情:

import os
env={}
os.spawnlpe(os.P_WAIT,'sh', 'sh', 'a.sh',env)
print env

然后得到:

{'MYVAR'="test"}

这可能吗?

【问题讨论】:

  • 谢谢! David 和 Noufal 的答案都回答了这个问题!

标签: python unix shell environment-variables


【解决方案1】:

不,对子流程中的环境变量所做的任何更改都保留在该子流程中。 (据我所知,就是)当子进程终止时,它的环境就丢失了。

我建议让 shell 脚本将其环境或至少您关心的变量打印到其标准输出(或标准错误,或者它可以将它们写入文件),然后您可以读取该输出来自 Python。

【讨论】:

  • 这可能是最好的方法。但是,我要添加的一个建议是,如果无法修改定义值的 shell 脚本,您可以将命令更改为 bash -c '. <env_setting_script>; env'脚本直接执行。
【解决方案2】:

我同意大卫的帖子。

Perl 有一个Shell::Source 模块可以做到这一点。它通过在附加了env 的子进程中运行您想要的脚本来工作,该脚本会生成一个由= 符号分隔的变量值对列表。您可以解析它并将环境“导入”到您的流程中。如果您需要这种行为,该模块值得一看。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-10-02
    • 2021-12-07
    • 2011-08-19
    • 2022-01-22
    • 2014-09-30
    • 1970-01-01
    • 2010-10-04
    相关资源
    最近更新 更多