【发布时间】:2017-09-09 21:08:00
【问题描述】:
当我从命令行运行 myProgram 时,输出会在生成时实时显示。当我像这样从节点生成它时,stdout 会缓冲并一次输出一大块。
const bat = require('child_process').spawn('myProgram', []);
bat.stdout.setEncoding('utf8');
bat.stdout.on('data', console.log);
如何告诉 child_process 不要缓冲标准输出?还是将缓冲区大小设置得更小?
下一次尝试:
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 says process.stdout“...是双工流...”
【问题讨论】:
-
尝试用
require('child_process').spawn('myProgram', { stdio: ["ignore", process.stdout, "ignore"] })替换整个代码块 -
谢谢 - 可以无缓冲地传递给控制台。我真正需要做的是流入'readline'。可以无缓冲地完成吗?
-
具体来说,stdio 参数可以是“tty、文件、套接字或管道”流。如何创建一个可以在那里工作的流,并让 readline 在它到达后立即吐出一行而不是等待一个大缓冲区?
标签: node.js