我有一个非常基本的readline实现,这似乎有一个问题,当我写入写入的数据出现在输入中并引发'line'事件。这都在标准的linux rxvt窗口中。
var rl readline.createInterface({
input: process.stdin,
output: process.stdout,
// terminal: false <--- setting true/false makes no difference
});
rl.on('line', function(line) {
var inp = line.trim();
console.log('line event');
switch(inp) {
case ....
default:
console.log('Unknown command: ' + inp + '\n');
}
});
然后 rl.write(字符串);
来自socket i / o。写入引发'line'事件,写入的数据作为未知命令出现。
如果我在终端上输入数据,它会按预期引发'line'事件并且正常工作。
显然,写入的数据不应出现在输入上,并询问可能是什么原因。
由于
答案 0 :(得分:4)
实际上rl.write
会触发直线事件。它应该在文档中,但事实并非如此。如果你想绕过解析器,只需写入process.stdout。
以前terminal: false
会导致输出具有尾随结束,强制执行行事件触发器。所以你可以真实地避免这种情况,但现在它已被改变,所以改变选项无济于事。
查看已提升的issue。最后的评论也是如此。