2013-12-14 7 views
8

Kann ich irgendwie feststellen, ob die Ausgabe von meinem Node.js-Skript an etwas anderes als das Terminal weitergeleitet wird?Wie erkennt man, ob die process.stdout von Node weitergeleitet wird?

ich irgendwie mag würde, wenn dies der Erfassung geschieht:

node myscript.js | less

Oder wenn dies geschieht:

node myscript.js

+0

Warum behandeln Sie das nicht von Knoten? Übergeben Sie ein Befehlszeilenargument, um es an weniger zu senden. Es ist viel weniger flexibel, aber wenn Sie wissen wollen, dass es piped ist, verlieren Sie diese Flexibilität sowieso. –

Antwort

15

Der einfachste Weg process.stdout.isTTY (0.8 +) würde :

$ node -p -e "Boolean(process.stdout.isTTY)" 
true 
$ node -p -e "Boolean(process.stdout.isTTY)" | cat 
false 

(Beispiel aus der offiziellen Dokumentation)

Alternativ können Sie die tty module für feinkörnige Steuerung verwenden:

if (require('tty').isatty(1)) { 
    // terminal 
} 
+0

so überrascht! Es funktioniert auch auf Windows – damphat

+1

@damphat es wäre wirklich seltsam, wenn es nicht auf Windows funktioniert :) Es ist eigentlich nur [delegiert zu libuv] (https://github.com/joyent/node/blob/master/src /tty_wrap.cc#L125) zu 'uv_get_handle', was nur unter'/src/win/'(der Windows-Verarbeitungslogik) geschieht, die in' handle.c' das [der Reihe nach] (https://github.com/joyent /libuv/blob/master/src/win/tty.c#L228) ruft einfach [GetConsoleMode] (http://msdn.microsoft.com/en-us/library/windows/desktop/ms683167 (v = vs.85) .aspx) :) –

0

Sie können prüfen, ob stdout des laufenden Prozesses durch, wo seine Dateideskriptors Punkte geleitet wird, zum Beispiel wie unten

readlink /proc/<your process id>/fd/1 

oder, genauer gesagt

[[ $(readlink /proc/$(pgrep -f 'node myscript.js')/fd/1) =~ ^pipe ]] && echo piped 
Verwandte Themen