我正在尝试编写一个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();
});

但是这一次它在空检查之前等待键盘输入,然后卡在那儿。 我想知道为什么会这样? 这是否意味着要执行null检查,我需要先将其pause ,然后等待readable的代码被触发,执行null检查,然后resume流,以防止node.js等待键盘输入? 在我看来这很尴尬。 有没有办法避免使用readable事件?

===============>>#1 票数:1 已采纳

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

  ask by xzhu translate from so

未解决问题?本站智能推荐: