Python ENV 文件被 PHP ENV 覆盖
Python ENV file overwritten by PHP ENV
我正在使用 PHP 和 Laravel 框架,我使用 .env 来设置我的环境变量。然后,我从我的 PHP 环境中调用 python 脚本,并将 return 结果 PHP。我的问题是,Python 中设置的默认 os.environ
被我的 PHP 环境覆盖。
我的代码(一个例子):
<?php
//Setting up the laravel environment and loading in the $_ENV variable
exec('python script.py');
然后是我的 python:
print os.environ
print os.environ
将 return 我在 PHP 环境设置期间设置的所有环境变量。所有默认环境变量,例如 PATH,要么未设置,要么被新环境覆盖。
我花了一些时间来诊断问题。然而,以我对python的有限了解,如何解决它证明是有问题的。有没有一种方法可以在不影响 PHP 环境的情况下重新初始化 python 环境,反之亦然?基本上我需要两个进程在环境方面相互独立,或者我需要设置 python 环境,然后在 return 到 PHP 之前用旧值更新它。
如果有人知道如何去做,你就是救星。
子进程在启动时从其父进程继承环境变量。子进程环境中的任何更改都不会传播到父进程。
在您的例子中,python 脚本是子进程;它从 php 脚本继承环境;现在您可以自由地对 os.environ
进行任何更改,这些更改根本不会影响 php 进程,例如在 PATH
环境变量 [= 的开头添加一个新路径15=]
os.environ['PATH'] = '/home/foo/bar/bin:' + os.environ['PATH']
至于PHP,$_ENV
中的变化不应该被子进程继承,只有putenv
明确设置的才应该被子进程继承。
我正在使用 PHP 和 Laravel 框架,我使用 .env 来设置我的环境变量。然后,我从我的 PHP 环境中调用 python 脚本,并将 return 结果 PHP。我的问题是,Python 中设置的默认 os.environ
被我的 PHP 环境覆盖。
我的代码(一个例子):
<?php
//Setting up the laravel environment and loading in the $_ENV variable
exec('python script.py');
然后是我的 python:
print os.environ
print os.environ
将 return 我在 PHP 环境设置期间设置的所有环境变量。所有默认环境变量,例如 PATH,要么未设置,要么被新环境覆盖。
我花了一些时间来诊断问题。然而,以我对python的有限了解,如何解决它证明是有问题的。有没有一种方法可以在不影响 PHP 环境的情况下重新初始化 python 环境,反之亦然?基本上我需要两个进程在环境方面相互独立,或者我需要设置 python 环境,然后在 return 到 PHP 之前用旧值更新它。
如果有人知道如何去做,你就是救星。
子进程在启动时从其父进程继承环境变量。子进程环境中的任何更改都不会传播到父进程。
在您的例子中,python 脚本是子进程;它从 php 脚本继承环境;现在您可以自由地对 os.environ
进行任何更改,这些更改根本不会影响 php 进程,例如在 PATH
环境变量 [= 的开头添加一个新路径15=]
os.environ['PATH'] = '/home/foo/bar/bin:' + os.environ['PATH']
至于PHP,$_ENV
中的变化不应该被子进程继承,只有putenv
明确设置的才应该被子进程继承。