2016-04-13 3 views
2

Ich überprüfe gern, ob es Daten in stdin gibt und ob es nicht weitergehen soll. Wenn ich diesen Code schreibeNicht blockierende STDIN-Prüfung am Knoten?

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

Es blockiert und ermöglicht es mir, in meine Konsole eingeben. Ich will das nicht. Ich möchte wirklich nur wissen, ob Daten reingeleitet wurden (zB echo 'data' |) und wenn ich Standard nicht ignoriere. Wie überprüfe ich, ob Daten in stdin sind, ohne zu blockieren?

+0

Sie lösen das Problem falsch. Beantwortet das Ihre Frage: http://stackoverflow.com/questions/7080458/test-withther-the-actual-output-is-a-terminal-or-not-in-node-js? Wenn es das tut, schließe ich das als ein Duplikat dazu. – slebetman

Antwort

0

Leider sieht es nicht so aus, als gäbe es einen guten Weg, dies in Knoten zu tun. Wenn überhaupt kein Stream eingegeben wird, wartet der Knoten auf Eingaben vom Terminal, was in diesem Fall nicht der Fall ist. /dev/null kann jedoch verwendet werden, um das Ereignis end auszulösen, ohne Daten zu übergeben.

Die Abhilfe, die ich verwendet haben ist ein Shell-Skript zu haben, die wie so mein Knoten Skript ausführt:

#!/usr/bin/env bash 

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

Dies funktioniert, da Knoten die end Ereignis sendet, wenn /dev/null als stdin verwendet wird. Dieses Skript überprüft, ob überhaupt ein Standard-Stream vorhanden ist, und sendet entweder /dev/null oder den ursprünglichen Stream.

Verwandte Themen