没有得到popen的全部回复

时间:2011-12-15 16:25:37

标签: php popen proc-open

嗨我正在用popen运行一个进程; -

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

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

我做错了吗?是proc_open更合适(我已经开始看到我是否可以尝试)。

1 个答案:

答案 0 :(得分:8)

两条缺失的行可能正在写入STDERR,而popen()只返回STDOUT的指针。

您可以使用proc_open()获取STDERR的指针,也可以将popen()行更改为

$handle = popen('python scriptos.py 2>&1', "r");

将STDERR重定向到STDOUT,因此它们包含在您的输出中。