2016-04-13 10 views
2

stdinにデータがあるかどうか、移動しないかどうか確認したい。このコードを書くときノンブロッキングSTDINチェックノード?

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

ブロックして私のコンソールに入力することができます。私はそれを望んでいない。私は実際にデータがパイプされているかどうか(たとえばecho 'data' |)、そしてstdinを無視しないかどうかだけを知りたがっています。ブロックせずにstdinにデータがあるかどうかを確認するにはどうすればよいですか?

+0

あなたは間違った方法で問題を解決しています。これはあなたの質問に答えますか:http://stackoverflow.com/questions/7080458/test-whether-the-actual-output-is-a-terminal-or-not-in-node-js?もしそうであれば、私はこれを複製物として閉じます。 – slebetman

答えて

0

残念ながら、ノードでこれを行うには良い方法がないように見えます。ストリームが全くパイプされていなければ、ノードは端末からの入力を待つでしょう。ただし、/dev/nullを使用して、データを渡すことなくendイベントをトリガーすることができます。

私が使用している回避策はそうのような私のノードのスクリプトを実行するシェルスクリプトを持つことです。

#!/usr/bin/env bash 

if [ -t 0 ]; then 
    exec ./index.js < /dev/null 
else 
    exec ./index.js 
fi 

/dev/nullを標準入力として使用する場合、ノードがendイベントを送信しますので、これは動作します。このスクリプトは、stdinストリームがまったく存在するかどうかを確認し、/dev/nullまたは元のストリームのいずれかを送信します。

関連する問題