非阻塞STDIN检查节点?

我喜欢检查标准input中是否有任何数据,是否有移动。 当我写这个代码

process.stdin.on 'data', (d) -> console.log 'data ' + d.length + " " + d process.stdin.on 'end', () -> console.log 'end' 

它阻止并允许我input到我的控制台。 我不要那个。 我真的只想知道数据是否在input(如echo 'data' | ),如果不忽略标准input。 如何检查标准input中是否有数据没有被阻塞?

不幸的是,在节点中看起来并不是一个好方法。 如果根本没有streaminput,节点将等待来自terminal的input,这不是我们想要的。 但是,可以使用/dev/null触发end事件,而不传入任何数据。

我一直在使用的解决方法是有一个shell脚本来执行我的节点脚本,如下所示:

 #!/usr/bin/env bash if [ -t 0 ]; then exec ./index.js < /dev/null else exec ./index.js fi 

这是有效的,因为当/dev/null用作stdin时,节点将发送end事件。 该脚本检查stdinstream是否存在,然后发送/dev/null或原始stream。