Capture/supress all output from php exec including stderr(捕获/抑制来自php exec的所有输出,包括stderr)
问题描述
我想通过exec()
运行几个命令,但我不希望屏幕上有任何输出。但是,我确实希望保留输出,以便可以在脚本运行时控制详细程度。
这是我的班级:
问题是,大多数应用程序都会在stderr
中放入大量令人恼火的无关内容,而我似乎无法在挡路中添加这些内容。例如,下面是通过它运行git clone
的输出:
我还看到其他问题声称使用输出缓冲区可以工作,但似乎不工作
这仍然会产生相同的结果。我可以通过在命令中将stderr路由到stdout来解决该问题,但是,这不仅阻止了我与stdout和stderr区分开来,而且该应用程序被设计为在Windows和Linux中运行,因此现在这是一个糟糕的烂摊子。
是否有办法分别捕获和抑制stderr和stdout?
更新/应答示例
根据评论中@exasoft的建议,我更新了我的方法,如下所示:
此技术提供了更高级的选项,包括异步进程。
推荐答案
命令proc_exec()
允许使用管道处理执行命令的文件描述符。
函数为:proc_open ( string $cmd , array $descriptorspec , array &$pipes […optional parameters] ) : resource
exec
),并给出一个数组来描述要为该命令"安装"的filedescriptor。此数组按文件描述符号编制索引(0=标准输入,1=标准输出…)包含类型(文件、管道)和模式(r/w…)加上文件类型的文件名。
然后,您将在$Pipes中获得一个filedescriptor数组,该数组可用于读取或写入(取决于请求的内容)。
使用后不要忘记关闭这些描述符。
请参考PHP手册页面(特别是示例):https://php.net/manual/en/function.proc-open.php
请注意,读/写与派生的命令相关,与PHP脚本无关。
这篇关于捕获/抑制来自php exec的所有输出,包括stderr的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!