【发布时间】:2019-06-24 04:19:42
【问题描述】:
我想执行一个 shell 命令并将输出放在一个数组中,这样: (1) 输出的每一行都是数组中的一个元素 (2) 这些行被“标记”为来自 stdout 或 stderr
类似:
╔═════════╦══════════════════╗
║ Line No ║ Stdout or stderr ║
╠═════════╬══════════════════╣
║ Line1 ║ Stdout ║
╠═════════╬══════════════════╣
║ Line2 ║ Stdout ║
╠═════════╬══════════════════╣
║ Line3 ║ Stderr ║
╠═════════╬══════════════════╣
║ Line4 ║ Stdout ║
╚═════════╩══════════════════╝
这是一个表,但我真正的意思是一个多维数组,其中 $thisarray[0], $thisarray[1] 是行。 我假设执行的 shell 命令在切换到 stderr 或 stdout 之前总是会生成一个新行。
这样,我就能够看到哪一行属于哪个文件描述符,并且能够在上下文中看到它。
有没有办法在 PHP 中使用 shell exec 命令或其他方式来执行此操作?
如果 PHP 无法做到这一点,我不介意其他技术。
【问题讨论】:
-
所以 PHP 脚本本身正在向 STDOUT 写入一些行,向 STDERR 写入一些行?你能修改PHP脚本吗?如果不是,您可以使用 Bash 重定向(我会在您澄清时发布示例代码)。此外,这些行是否按任何顺序排序?
-
基本上你可以使用
proc_open然后监听STDOUT和STDERR流并将数据连同它的来源信息一起推送到一个数组中。