popen未完全返回响应

4

你好,我正在使用popen运行一个进程;

$handle = popen('python scriptos.py', "r");
while (!feof($handle)) {
    $data = fgets($handle);
    echo "> ".$data;
}

当我运行一个返回5行的进程时,我只得到3行。在CLI中运行相同的命令,我会得到更多的响应。就好像它提前停止阅读(它可能需要时间来完成并在工作时更新下两行,这是一个进度指示器)。

我有错吗?proc_open 更适合吗(我已经开始尝试是否可以使用它)。

1个回答

8
这两行缺失的内容可能被写入到标准错误流(STDERR),而popen()仅返回STDOUT的指针。
您可以使用proc_open()获取STDERR的指针,或者将popen()行更改为:
$handle = popen('python scriptos.py 2>&1', "r");

将 STDERR 重定向到 STDOUT,这样它们就会包含在输出中。


+1,我也怀疑是这样的。在你读完所有内容之前,你不会得到EOF。 - codaddict
Php ... 什么?ヽ(`Д´)ノ︵ ┻━┻ - ThorSummoner

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接