环境变量即使在退出后仍保留在Python脚本中

环境变量即使在退出后仍保留在Python脚本中,python,environment-variables,Python,Environment Variables,我正在运行用Python编写的测试工具。在通过这个测试工具运行测试之前,我通过一个shell脚本导出一些环境变量,该脚本在导出变量后调用测试工具。当线束出现在图中时,它会检查变量是否在环境中,并根据环境变量中的值执行操作 但是,在执行测试之后,我认为环境变量值不会被清除,因为下一次,它会拾取这些值,即使这些值不是通过shell脚本设置的 如果明确设置,线束将拾取新值,但如果我们下次清除该值,它将再次拾取在第一次运行中设置的值 我尝试在每次测试执行后使用“delos.environ['var']”

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

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

如果明确设置,线束将拾取新值,但如果我们下次清除该值,它将再次拾取在第一次运行中设置的值

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


在shell中,这些变量的设置与“env”unix命令中的设置不同。它仅在测试线束中显示值。没有一个环境变量将其值存储在任何文本文件中。

子shell可以更改从父环境继承的变量,但子环境所做的更改不会影响父环境。

启动新的子shell时,从父级导出的变量在其中可见。该变量由del os.environ['var']取消设置,但父进程中该变量的值保持不变。

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

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

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

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

但是如果我们在调用python脚本之前和返回之后在shell脚本中放入'env'命令,它没有显示这些变量已设置。因此,这意味着环境变量未在父对象中设置,但在子对象中被视为“设置”。在子对象中执行的所有操作都不会影响其父对象。子对象不能影响父对象的环境。但是,如果启动线束的shell脚本修改了自己的环境,然后启动另一个线束,则更改将持续。另外,有一种方法可以获得持久的环境修改:您没有使用
运行shell脚本。脚本
或源脚本?这将在同一进程中执行脚本,而不是在子进程中,并且可以更改进程上下文(环境、当前目录)。