强制Node.js刷新写到子进程



生成一个子进程,如下所示:

var child = require('child_process');
var proc = child.spawn('python', ['my_script.py', '-p', 'example']);

还设置了一些数据处理:

proc.stdin.setEncoding('utf8');
proc.stdout.setEncoding('utf8');
proc.stderr.setEncoding('utf8');
proc.stdout.on('data', function (data) {
  console.log('out: ' + data);
});
proc.stderr.on('data', function (data) {
  console.log('err: ' + data);
});
proc.on('close', function (code) {
  console.log('subprocess exited with status ' + code);
  proc.stdin.end();
});

我的Python脚本从stdin读取行,对每一行执行一些操作并打印到stdout。它在shell中工作得很好(我写了一行并立即得到输出),但当我在Node:

中这样做时
for (var i = 0; i < 10; i++) {
  proc.stdin.write('THIS IS A TESTn');
}

我什么也没得到。

我必须修复它调用proc.stdin.end(),但这也终止了子进程(我想留在后台,流数据)。

我还触发了一次刷新,用大量的写操作填充缓冲区,但这不是一个真正的选项。

是否有办法手动刷新流?

您没有在print语句后刷新Python的输出。我也有类似的问题,@Alfe回答了我的问题。看看这个:

流子进程以流动模式输出

相关内容

  • 没有找到相关文章

最新更新