【问题标题】:Environment variables getting preserved in Python script even after exiting即使在退出后,环境变量也会保留在 Python 脚本中
【发布时间】:2012-03-09 13:00:43
【问题描述】:

我正在运行用 Python 编写的测试工具。在通过此测试工具运行测试之前,我通过一个 shell 脚本导出一些环境变量,该脚本在导出变量后调用测试工具。当线束出现时,它会检查变量是否在环境中,并根据环境变量中的值进行操作。

但是在执行测试之后,我认为环境变量的值不会被清除,因为下一次它会获取这些值,即使这些值不是通过 shell 脚本设置的。

如果它们是明确设置的,则安全带会获取新值,但如果我们下次清除它,它会再次获取第一次运行中设置的值。

我尝试在每次测试执行后使用“del os.environ['var']”命令清除变量,但这并没有解决问题。有人知道为什么要保留这些值吗?

在 shell 上,这些变量没有像 'env' unix 命令中看到的那样设置。它只是在测试工具中显示值。所有环境变量都没有将它们的值存储在任何文本文件中。

【问题讨论】:

    标签: python environment-variables


    【解决方案1】:

    子shell 可以更改它从父shell 继承的变量,但子shell 所做的更改不会影响父shell。
    当一个新的 subshel​​l 启动时,从父级导出的变量是可见的。 del os.environ['var'] 未设置该变量,但该变量在父级中的值保持不变。

    【讨论】:

    • 但是如果我们在调用python脚本之前和返回之后将'env'命令放在shell脚本中,它不会显示这些变量已设置。
    • 所以这意味着 env 变量没有在父级中设置,但在子级中被视为“设置”。
    • 您在 subshel​​l 中所做的一切都不会影响其父级。
    • 孩子不能影响父母的环境。但是,如果启动线束的 shell 脚本修改了自己的环境,然后启动了另一个线束,则更改将持续存在。此外,还有一种获得持久环境修改的方法:您没有使用. scriptsource script 运行shell 脚本?这将在同一个进程中执行您的脚本,而不是在子进程中,并且可以更改进程上下文(环境、当前目录)。
    【解决方案2】:

    python 进程不能影响启动它的父 shell 进程的环境。如果你有一个父 shell,它的环境将持续存在,除非/直到 shell 本身改变它。

    但是,bash 脚本只能为子脚本设置环境变量,如下所示:

    export OPTIONS=parent
    OPTIONS=child python child.py
    echo $OPTIONS
    

    这将回显“父”,而不是“子”,但 python 进程将看到OPTIONS=child。您没有很清楚地描述您的设置,但也许这会有所帮助?

    【讨论】:

      猜你喜欢
      • 2013-01-22
      • 2019-07-18
      • 2018-12-08
      • 1970-01-01
      • 2021-03-09
      • 1970-01-01
      • 1970-01-01
      • 2021-04-13
      • 1970-01-01
      相关资源
      最近更新 更多