如何从仍在PHP中运行的进程中获得部分输出?

时间:2018-10-17 16:47:08

标签: php for-loop

我有一个PHP脚本,该脚本使用proc_open()运行第二个脚本。

然后,主脚本向第二个脚本传递STDIN上的一些数据。

我希望第二个脚本能够打印输出,而主脚本可以接收输出。

到目前为止,一切正常。

但是,我的主脚本需要多次调用第二个脚本,并且为了对其进行优化,我想保持资源开放。没关系。

但是我会逐渐看到脚本的输出。这似乎不起作用:看起来两个脚本最终都在等待对方。

所以我想做的事情归结为:

feature/name

// Main script
$resource = proc_open($command, $descriptorspec, $pipes);

foreach ($data as $line) {
  fwrite($pipes[0], $line);

  // Get output back from the second script's STDOUT to see how
  // it reacted to this piece of data.
  while ($line = fgets($this->pipes[1])) {
    dump("script: $line");
  }
}

1 个答案:

答案 0 :(得分:0)

我已经找到了第二个脚本告诉主脚本停止等待的方法:

print "\n";

,然后从流程获取输出时,主脚本需要执行以下操作:

// Get output back from the second script's STDOUT to see how // it reacted to this piece of data. while ($line = trim(fgets($this->pipes[1]))) { dump("script: $line"); }

第二个脚本基本上是在主脚本中使用一条空行作为消息,说“我正在做输出,请停止收听”。