嗨我正在用popen运行一个进程; -
$handle = popen('python scriptos.py', "r");
while (!feof($handle)) {
$data = fgets($handle);
echo "> ".$data;
}
我只从一个返回5行的进程中得到3行。我在CLi中运行这个确切的命令,我会得到更多的响应。就好像它提前停止阅读一样(在工作时可能需要一段时间才能完成并更新下两行,这是一个进度指示器。)
我做错了吗?是proc_open更合适(我已经开始看到我是否可以尝试)。
答案 0 :(得分:8)
两条缺失的行可能正在写入STDERR,而popen()
只返回STDOUT的指针。
您可以使用proc_open()
获取STDERR的指针,也可以将popen()
行更改为
$handle = popen('python scriptos.py 2>&1', "r");
将STDERR重定向到STDOUT,因此它们包含在您的输出中。