强制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程输出