4

让我们以这个命令为例:

$command = "echo '/just/for/the/test /heh/' | awk '//just// {print $1}'";

在 shell 中直接复制它时,出现以下错误:

awk: cmd. line:1: //just// {print $1}
awk: cmd. line:1:         ^ unterminated regexp

但是,当我exec()这样做时,我得到没有输出的状态代码 1:

exec($command, $output, $status);

var_dump( $command, $output, $status );

// string(69) "echo '/just/for/the/test /heh/' | awk '//just// {print $1}'"
// array(0) { }
// int(1)

如何检索 exec 的 STDERR 部分?

4

2 回答 2

5

你应该像这样将stderr重定向到stdout

$stout = exec($command . " 2>&1", $output, $status);

另请参阅此处的 PHP StdErr after Exec()

于 2012-09-18T07:38:58.753 回答
3

我能想到的exec()唯一方法是在您正在执行的命令中将 STDERR 重定向到 STDOUT,例如:

$command = "echo '/just/for/the/test /heh/' | awk '//just// {print $1}' 2>&1";

另一种方法exec()是使用proc_open()函数族。执行命令并proc_open()打开指向 STDIN、STDOUT 和 STDERR 的文件指针,您可以从中读取/写入

有关更多信息,请参阅手册

于 2012-09-18T07:38:45.150 回答