javascript – 以流动模式流式传输子进程输出

我有使用Python编写的自定义命令行,它使用“print”语句打印其输出.我通过生成子进程并使用child.stdin.write方法向它发送命令,从Node.js中使用它.这是来源:

var childProcess = require('child_process'),
    spawn = childProcess.spawn;

var child = spawn('./custom_cli', ['argument_1', 'argument_2']);

child.stdout.on('data', function (d) {
  console.log('out: ' + d);
});

child.stderr.on('data', function (d) {
  console.log('err: ' + d);
});

//execute first command after 1sec
setTimeout(function () {
  child.stdin.write('some_command' + '\n');
}, 1000);

//execute "quit" command after 2sec
//to terminate the command line
setTimeout(function () {
  child.stdin.write('quit' + '\n');
}, 2000);

现在的问题是我没有收到flowing mode中的输出.我想在打印后立即从子进程获取输出,但是只有当子进程终止时才会收到所有命令的输出(使用自定义cli的quit命令).

最佳答案
您需要刷新子进程中的输出.

可能你认为这不是必要的,因为当测试并让输出在终端上发生时,库就会自动刷新(例如,当一条线完成时).当打印进入管道时(由于性能原因),不会这样做.

自己动手:

#!/usr/bin/env python

import sys, time

while True:
  print "foo"
  sys.stdout.flush()
  time.sleep(2)

转载注明原文:javascript – 以流动模式流式传输子进程输出 - 代码日志