非阻塞STDIN检查节点?

时间:2016-04-13 23:12:31

标签: node.js

我想检查stdin中是否有任何数据以及是否还没有继续前进。当我写这段代码时

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

它阻止并允许我输入我的控制台。我不想要那个。我真的只想知道数据是否通过管道传输(例如echo 'data' |),如果没有,则忽略stdin。如何检查stdin中是否有数据没有阻塞?

1 个答案:

答案 0 :(得分:0)

不幸的是,在节点中看起来没有好办法。如果根本没有输入流,节点将等待来自终端的输入,这不是我们想要的情况。但是,end可用于触发#!/usr/bin/env bash if [ -t 0 ]; then exec ./index.js < /dev/null else exec ./index.js fi 事件,而不传入任何数据。

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

end

这是有效的,因为当/dev/null用作标准输入时,节点将发送/dev/null事件。此脚本检查是否存在stdin流,然后发送NavigationView navigation_view = (NavigationView) findViewById(R.id.navigation_view); navigation_view.setItemTextColor(ColorStateList.valueOf(Color.BLACK)); navigation_view.setItemIconTintList(null); 或原始流。