非阻塞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。