Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在python中设置环境变量_Python_Linux_Bash - Fatal编程技术网

在python中设置环境变量

在python中设置环境变量,python,linux,bash,Python,Linux,Bash,这个话题有很多问题,但不幸的是他们没有解决我的问题 我有一个shell脚本,它的目的只是设置环境变量,我们称它为env.sh。第二个shell脚本是源env.sh的主程序脚本,它使用在其中定义的变量。当这两个脚本都是bash脚本时,这种方法可以很好地工作 我的问题是,我试图用python程序替换主shell脚本。这个python程序也依赖于由env.sh设置的环境变量 在启动任何使用这些环境变量的例程之前,我可以在python中对env.sh的源代码做些什么 我必须使用模块子流程运行bash-c

这个话题有很多问题,但不幸的是他们没有解决我的问题

我有一个shell脚本,它的目的只是设置环境变量,我们称它为env.sh。第二个shell脚本是源env.sh的主程序脚本,它使用在其中定义的变量。当这两个脚本都是bash脚本时,这种方法可以很好地工作

我的问题是,我试图用python程序替换主shell脚本。这个python程序也依赖于由env.sh设置的环境变量

在启动任何使用这些环境变量的例程之前,我可以在python中对env.sh的源代码做些什么

我必须使用模块子流程运行bash-c source env.sh。但是,如果我理解正确,这是行不通的,因为变量是在调用python程序的子进程中设置的,因此在父进程中不可用。这是正确的吗

类似的解决方案是使用bash-c source env.sh&&env,读取python中env的输出,迭代列表并写入os.environ。但这种方法将再次写入每个变量,即使它已经定义。如果有很多变量呢

我能想到的最后一个解决方案是读取和解析env.sh文件,并设置我能找到的变量。一个问题是env.sh中的某些导出是嵌套的,这会导致:

export SOMETHING=$FOO/Bar
正确解析可能会变得复杂

有没有其他我还没有找到或没有想到的方法

一些选项:


Env变量寻源非常常见,我不建议您自己使用。

python中的source Env.sh-问题就在这里。为什么不在环境变量已经设置好的情况下执行python脚本呢?我认为如果没有定义所需的环境变量,这将是一种不退出程序的安全措施。相反,我从文件中读取它们,并在继续程序之前自己设置它们。在shell脚本中就是这样做的。不要直接调用python脚本,使用包装器。