我正在尝试编写一个node.js脚本,如果它是管道传输的,只接受来自stdin的输入(而不是键盘的等待输入)。因此,我需要确定stdin
管道输入是null
。
首先我尝试使用readable
事件:
var s = process.stdin;
s.on('readable', function () {
console.log('Event "readable" is fired!');
var chunk = s.read();
console.log(chunk);
if (chunk===null) s.pause();
});
结果如预期:
$ node test.js
Event "readable" is fired!
null
$
然后我尝试使用data
事件做同样的事情,因为我喜欢使用流动模式:
var s = process.stdin;
s.on('data', function (chunk) {
console.log('Event "data" is fired!');
console.log(chunk);
if (chunk===null) s.pause();
});
但是这次它在空检查之前等待键盘输入,并且在那里停留。我想知道它为什么这样做?这是否意味着为了进行空检查,我需要首先pause
,然后等待readable
被触发,执行空检查,然后resume
流,只是为了阻止node.js等待键盘输入?这对我来说似乎很尴尬。有没有办法避免使用readable
事件?