Einen Shell-Befehl von Node.js ausführen, ohne die Ausgabe zu puffern

Ich versuche zu starten, einen shell-Befehl aus Node.js, ohne Umleitung des Befehls input-und output-genau wie Beschuss aus, um einen Befehl über ein shell-Skript, oder mithilfe von Ruby ' s system Befehl. Wenn der Kind-Prozess will schreiben auf STDOUT, ich will, dass, um direkt auf die Konsole (oder umgeleitet, wenn mein Knoten app, die die Ausgabe umgeleitet wurde).

Knoten nicht scheinen, um eine einfache Möglichkeit, dies zu tun. Es sieht aus wie der einzige Weg, ein anderer Prozess mit child_process, die immer leitet die child-Prozesse input-und output-pipes. Kann ich code schreiben, um Daten zu akzeptieren, aus denen Rohre und schreiben Sie es auf meinen Prozess STDOUT und STDERR, aber wenn ich das mache, die APIs, die mich zwingen, mich zu opfern, eine gewisse Flexibilität.

Möchte ich zwei Funktionen:

  • Shell-syntax. Ich möchte in der Lage sein Rohr Ausgabe zwischen den Befehlen oder ausführen von Windows batch-Dateien.
  • Unbegrenzten Ausgang. Wenn ich ' m Beschuss aus einem compiler und will Sie generieren Megabyte compiler-Warnungen, will ich Sie alle zu scrollen über den Bildschirm (bis der Benutzer bekommt es satt und trifft Strg+C).

Sieht es aus wie ein Knoten will mich zwingen wählen Sie zwischen diesen beiden Funktionen.

  • Wenn ich will, eine unbegrenzte Anzahl von Ausgabe, die ich verwenden kann child_process.spawn und dann tun child.stdout.on('data', function(data) { process.stdout.write(data); }); und die gleiche Sache für stderr, und es werde es gerne weiterleiten von Daten, bis die Kühe nach Hause kommen. Leider spawn unterstützt keine shell-syntax.
  • Wenn ich will-shell-syntax, die ich verwenden kann child_process.exec. Aber exec besteht auf die Pufferung der Kindprozess STDOUT und STDERR für mich und geben Sie mir alle am Ende, und es begrenzt die Größe dieser Puffer (konfigurierbar, 200K standardmäßig). Ich kann noch Haken, die on('data') Veranstaltungen, wenn ich will, um die Ausgabe zu sehen, wie es generiert, aber exec noch die Daten in seinen Puffer zu. Wenn die Menge der Daten übersteigt die vordefinierten Puffer-Größe exec beenden wird der Kind-Prozess.

(Es gibt auch child_process.execFile, die die schlimmsten beider Welten aus einer Flexibilität Standpunkt: keine shell-syntax, aber Sie haben noch bis zum cap die Höhe der Ausgabe, die Sie erwarten.)

Bin ich etwas fehlt? Gibt es eine Möglichkeit, nur shell aus zu einem Kind-Prozess in Knoten, und nicht leiten Ihre input-und output? Etwas, das unterstützt shell-syntax und nicht Scheiße aus, nach einer vordefinierten Höhe der Ausgabe, gerade wie verfügbar ist in shell-Skripte, Ruby, etc.?

Kommentar zu dem Problem - Öffnen
Haben Sie jemals herausfinden? Ich bin in einer ähnlichen situation. Kommentarautor: Marcus Stade
gleiche Problem, "bis die Kühe nach Hause kommen', Dank, für, dass, made my day, nach 10h Arbeit Kommentarautor: neric

InformationsquelleAutor der Frage Joe White | 2012-03-19

Schreibe einen Kommentar