大家好,欢迎来到IT知识分享网。
如果你想要执行一个命令,同时得到stderr和stdout ,而不是“合并”,一个解决scheme可能会使用proc_open ,它提供了一个很好的控制正在执行的命令 – 包括一种方式pipe道stdin / stdout / stderr 。
下面是一个例子:让我们考虑一下在test.sh有这个shell脚本,它写入stderr和stdout :
#!/bin/bash echo ‘this is on stdout’; echo ‘this is on stdout too’; echo ‘this is on stderr’ >&2; echo ‘this is on stderr too’ >&2;
现在,让我们在temp.php编写一些PHP – 首先,我们初始化I / O描述符:
$descriptorspec = array( 0 => array(“pipe”, “r”), // stdin 1 => array(“pipe”, “w”), // stdout 2 => array(“pipe”, “w”), // stderr );
然后,使用这些描述符在当前目录中执行test.sh命令,并说I / O应该从/到$pipes :
$process = proc_open(‘./test.sh’, $descriptorspec, $pipes, dirname(__FILE__), null);
我们现在可以从两个输出pipe道读取:
$stdout = stream_get_contents($pipes[1]); fclose($pipes[1]); $stderr = stream_get_contents($pipes[2]); fclose($pipes[2]);
而且,如果我们输出这两个variables的内容:
echo “stdout : \n”; var_dump($stdout); echo “stderr :\n”; var_dump($stderr);
执行temp.php脚本时,我们得到以下输出:
$ php ./temp.php stdout : string(40) “this is on stdout this is on stdout too ” stderr : string(40) “this is on stderr this is on stderr too “
希望这可以帮助 :-)
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/25535.html