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