當我從命令行運行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在它到達時立即吐出一行,而不是等待一個大的緩衝區? –