当我从命令行运行myProgram时,输出会在生成时实时显示。当我像这样从节点产生它时,stdout缓冲区并一次出现一个大块。派生child_process标准输出到'readline'没有缓冲节点?
const bat = require('child_process').spawn('myProgram', []);
bat.stdout.setEncoding('utf8');
bat.stdout.on('data', console.log);
我该如何告诉child_process不要缓冲stdout?或者设置更小的缓冲区大小?
下一次尝试:
const spawn = require('child_process').spawn;
var options = {
stdio: ["ignore", process.stdout, "ignore"]
};
const bat = spawn('myProgram', [], options);
const rl = require('readline').createInterface({
input: process.stdout
});
rl.on('line', function(line) {
console.log(line);
});
这将打印process.stdout
到终端,但readline
没有得到数据,即使documentation saysprocess.stdout
“......是复式流......”
尝试用'require('child_process')替换整个代码块。spawn('myProgram',{stdio:[“ignore”,process.stdout,“ignore”]})' – MultiplyByZer0
Thanks - that works to无缓冲地传递给控制台。我真正需要做的是流入'readline'。这可以做到无缓冲吗? –
具体来说,stdio参数可以是“tty,文件,套接字或管道”流。我如何创建一个可以在那里工作的流,让readline在它到达时立即吐出一行,而不是等待一个大的缓冲区? –