【问题标题】:Execute shell command via PHP and get output with info on whether from stdout and stderr通过 PHP 执行 shell 命令并获取输出信息是否来自 stdout 和 stderr
【发布时间】: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然后监听STDOUTSTDERR流并将数据连同它的来源信息一起推送到一个数组中。

标签: php bash shell


【解决方案1】:

如果你输入带有换行符的字符串并运行它:

$arr = explode(PHP_EOL, $output);

然后 $arr 将使您的数组在每个 $output 行中包含一项。

【讨论】:

  • 很遗憾错过了关于区分 stdout 和 stderr 的更重要的部分
猜你喜欢
  • 2021-05-29
  • 1970-01-01
  • 1970-01-01
  • 2016-01-13
  • 2014-06-29
  • 1970-01-01
  • 1970-01-01
  • 2016-10-21
相关资源
最近更新 更多