【问题标题】:Get change of variable environment from script python从脚本python获取变量环境的变化
【发布时间】:2014-08-27 23:02:27
【问题描述】:

我有一个 python 脚本,它运行一个 set_env.sh 文件。 后来,我可以把这个新的变量环境改成 set_env.sh 有可能吗?

set_env.sh

var1="value1" var2="value2" var3="value3"

get_env.py

import os
os.system("set_env.sh")
print os.environ['var1']

结果:KeyError: 'var1'

我知道我可以在 python 文件中使用 os.environ['var1'] = 'value' (或 set var env)。 但我只能从 shell 文件中访问此环境信息。

你能帮帮我吗?

【问题讨论】:

  • 当你从 shell 运行 env - 你看到变量设置了吗?
  • 打印环境变量/值并读入python
  • @programmerjake 这就是 os.environ 所做的
  • @alfasin,感谢您的回复。是的,我修改了 set_env.sh 并添加了 echo $var1 并且工作正常。
  • @moylop260 os.system 执行命令在子shell中。但是,子 shell 不能修改父 shell 的环境。因此,set_env.sh 所做的更改将在os.system 完成后立即被遗忘。

标签: python linux shell


【解决方案1】:

我的临时解决方案是

(?P<variable>[\w]*)[ ]*[\=][ ]*[\"|\']{0,1}(?P<value>[\w]*)[\"|\']{0,1}

Debuggex Demo

        enviroment_regex = "(?P<variable>[\w]*)[ ]*[\=][ ]*[\"|\']{0,1}(?P<value>[\w]*)[\"|\']{0,1}"
        match_object = re.search( enviroment_regex, open("set_env.sh", "r").read() )
        os.environ[match_object.group("variable")] = match_object.group("value")

【讨论】:

    【解决方案2】:

    为了从 python 设置环境变量使用:

    os.environ["var1"] = "value1"
    

    注意 python 生成环境,这意味着只要你在 python 程序中,环境就会包含var1。如果您从 shell 中键入 env(在运行程序之后),则不会记得 var1

    欲了解更多信息:https://www.inkling.com/read/programming-python-mark-lutz-4th/chapter-3/shell-environment-variables

    【讨论】:

    • 我的py脚本执行sh脚本。
    • @moylop260 是的,但它在脚本完成执行后立即关闭的子shell中执行它。我想正确的问题是:你想做什么?如果您在 python 脚本的顺序部分中依赖环境变量 - 然后使用我的答案。
    猜你喜欢
    • 1970-01-01
    • 2012-01-19
    • 1970-01-01
    • 1970-01-01
    • 2013-10-26
    • 2018-09-16
    • 2021-05-07
    • 2013-08-25
    相关资源
    最近更新 更多