强制Node.js刷新写入subprocess

我产生了一个像这样的subprocess:

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()但也终止subprocess(我想留在后台,stream数据)。

我也触发了大量的写入填充缓冲区,但这不是一个真正的select。

有什么办法来手动刷新stream?

打印语句之后,您不会刷新Python的输出。 我也有类似的问题,@Alfe回答了我的问题。 看看这个:

stream式传输子stream程输出