这是我的代码:
$command = 'path to some script';
echo "Running command:\n $command ";
$result = array ();
exec ($command, $result);
结果如下:
运行命令:
[这里有一些由命令本身打印的警告]
某些脚本的路径
即。脚本的错误输出以某种方式插入到它之前的echo命令的中间(!)。
想法?
答案 0 :(得分:4)
这将归结为缓冲与非缓冲的io。错误输出将是stderror,另一个将是stdout。 Stdout通常是缓冲的 - 所以如果你在运行脚本之前强制它进行刷新,你将得到你想要的结果。
答案 1 :(得分:1)
这是因为exec
没有捕获标准错误( stderr ),例如:
exec ('/bin/echo foo > /dev/stderr', $result);
输出foo
,即使exec
不输出任何内容。您可以通过执行以下操作强制执行:
exec ($command.' 2>&1', $result);
它出现在中间的原因可能是因为输出缓冲(如上所述@Danny)。输出缓冲区可能在命令结束之前耗尽,因此会自动刷新,并启动一个新的缓冲区。因此错误出现在中间。