有没有一种方法可以在PHP中子流程执行结束时获得环境状态


Is there a way to get the state of the environment at the end of execution of a subprocess in PHP?

当我的PHP脚本运行一个子进程(具有任何相关函数,如exec()system()passthru()popen()proc_open(),以及我可能忘记的其他函数)时,我可以控制进程开始时的环境变量的值(通过更改脚本的环境本身,或者,至少在proc_open()的情况下,通过传递所需的环境作为参数)。但是,有没有一种方法可以让我的脚本获得进程结束时的环境状态(即进程可能会更改环境,我希望我的脚本能够跟踪这些更改)。使用getenv()是无用的,因为脚本的环境不会被子进程更改。关于这是否可以做到,以及如何做到,有什么想法吗?

所以,我不喜欢它,但这就是我所想到的:我已经编写了一个脚本,它将整个环境输出为一行,并且我在调用过程之后立即调用它,作为同一命令的一部分。之后,我可以分析输出,从最后一行提取环境,并将其丢弃,以便处理原始过程中的输出。

实现这一点有很多选择。我所做的是:

1) 创建一个Python脚本并命名它,例如printenv,它看起来像这样:

#!/usr/bin/python2.7
import os
print os.environ

2) 当调用我的流程时,我调用的不是<some command>,而是<some command> && printenv

当然,脚本不必是Python,也不必以Python的print格式输出环境。(但这种格式非常方便,例如可以传递给JavaScript赋值。)