Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/269.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/2/python/300.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环境文件被PHP环境覆盖_Php_Python_Shell_Environment Variables - Fatal编程技术网

Python环境文件被PHP环境覆盖

Python环境文件被PHP环境覆盖,php,python,shell,environment-variables,Php,Python,Shell,Environment Variables,我正在使用PHP和Laravel框架,并使用.env设置环境变量。然后从PHP环境中调用python脚本,并将结果返回给PHP。我的问题是,Python中设置的默认os.environ正在被我的PHP环境覆盖 我的代码(示例): print os.environ将返回PHP环境设置期间设置的所有环境变量。所有默认环境变量(如PATH)不是由新环境设置就是由新环境覆盖 我花了一段时间来诊断这个问题。然而,由于我对python的知识有限,如何解决它被证明是个问题。有没有一种方法可以在不影响PHP环境

我正在使用PHP和Laravel框架,并使用.env设置环境变量。然后从PHP环境中调用python脚本,并将结果返回给PHP。我的问题是,Python中设置的默认
os.environ
正在被我的PHP环境覆盖

我的代码(示例):

print os.environ
将返回PHP环境设置期间设置的所有环境变量。所有默认环境变量(如PATH)不是由新环境设置就是由新环境覆盖

我花了一段时间来诊断这个问题。然而,由于我对python的知识有限,如何解决它被证明是个问题。有没有一种方法可以在不影响PHP环境的情况下重新初始化python环境,反之亦然?基本上,我需要这两个进程在环境方面彼此独立,或者我需要设置python环境,然后在返回PHP之前用旧值更新它


如果有人知道如何去做,你将是一个救星。

子进程在启动时从父进程继承环境变量。子进程环境中的任何更改都不会传播到父进程

在您的例子中,python脚本是子进程;它从php脚本继承环境;现在,您可以自由地对
os.environ
进行任何更改,这些更改根本不会影响php进程,例如,在
path
环境变量的开头预先添加一个新路径

os.environ['PATH'] = '/home/foo/bar/bin:' + os.environ['PATH']


对于PHP,子进程不应继承
$\u ENV
中的更改,只有显式设置为
putenv
的更改才应由子进程继承。

感谢您的响应。你知道我如何检索默认的python环境/重新初始化该环境吗?@jamespence没有“默认的python环境”。环境总是来自父进程。如果这是您想要的,您可以使用
env
命令强制“无主”环境。@EtanReisner什么是“无主”环境?你能给我一个正确方向的链接吗?@JamesSpence
man-env
。从这个意义上说,“无主”意味着“脱离运行进程的环境”
env
在父进程和子进程之间插入自身,并按照您的要求清洁环境(也可以插入您告诉它的环境变量),以便为子进程提供“原始”环境。@EtanReisner感谢您的参考。那么,我是否要修改PHP脚本,使其看起来像
env&&pythonscript.py
print os.environ
os.environ['PATH'] = '/home/foo/bar/bin:' + os.environ['PATH']