4

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

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

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

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

4

1 回答 1

8

缺少的两行可能正在写入STDERR,并且popen()仅返回 STDOUT 的指针。

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

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

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

于 2011-12-15T16:28:33.200 回答