强制Node.js刷新对子进程的写入

时间:2013-06-17 03:18:32

标签: node.js stream stdin flush

我产生了一个像这样的子进程:

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 TEST\n');
}

我一无所获。

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

我还触发了一个刷新填充缓冲区的大量写入,但这不是一个真正的选择。

有没有办法手动刷新流?

1 个答案:

答案 0 :(得分:2)

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

Stream child process output in flowing mode