如何防止node.js等待键盘输入?

时间:2014-04-20 01:36:09

标签: node.js

我正在尝试编写一个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事件?

1 个答案:

答案 0 :(得分:1)

使用节点核心库中的tty.isatty()。如果stdin是管道,那么该函数将返回false