Rückkehr Ich bin ein Yeoman Generator und mit child_process.spawn Schreiben() (über Yeoman des spawnCommand() - siehe https://github.com/yeoman/generator/blob/master/lib/actions/spawn_command.js)Knoten Kindprozess Laich stdout als null
Mein Code sieht wie folgt aus:
var list = this.spawnCommand('npm', ['list', 'sails'], {stdio: 'pipe'});
list.stdout.on('data', /* callback here that wants to consume the command's output */);
Ich kann sehen, dass list.stdio
existiert, und dass es [0,1,2]
als Schlüssel hat. Jeder von ihnen ist null (oder undefiniert). Das heißt, Protokollierung _.keys(list).join()
Ausgänge ,,
. list.stdout.on()
gibt mir eine Ausnahme, die besagt, dass stdout
null ist.
Was ich erreichen muss, ist zu überprüfen, ob ein bestimmtes Paket installiert ist und sehen, was die Versionsnummer ist. Aber ich muss später auch andere Dinge tun, wo ich die Ausgabe von CLI-Befehlen analysiere (zum Beispiel git log output), also brauche ich eine allgemeine Lösung. .spawn()
scheint wie, was ich will, aber Beispiele, die ich gesehen habe, scheinen darauf hinzuweisen, dass stdout etwas sein sollte, das eine .on()
Methode hat. Zum Beispiel der hier angegebene: http://nodejs.org/api/child_process.html#child_process_child_process_spawn_command_args_options wo es zeigt ls -lh /usr
läuft.
Fehle ich etwas einfaches? Ich frage mich, ob der Befehl, den ich ausführe, überhaupt keine Ausgabe zurückgibt, wenn das bedeutet, dass stdout null ist. Wenn das der Fall ist, dann muss ich nur Befehle identifizieren, die möglicherweise keine Ausgabe haben, und einfach überprüfen, ob stdout nicht null ist, bevor ich versuche, sie zu verwenden.
bearbeiten tatsächlich, zeigt die npm Liste Befehls der Ausgabe auf der Kommandozeile, aber nach den Log-Anweisungen Ich war mit dem Problem zu diagnostizieren (was ich nach dem .spawnCommand()
Aufruf und vor dem .on()
Anruf setzen würde. Aber ich brauche Zugriff darauf in meinem Code - es in der Befehlszeile anzeigen zu lassen, ist neben dem Punkt (außer dass es mich wissen lässt, dass der Prozess den CLI-Befehl erfolgreich ausgeführt hat).
Haben Sie jemals herausgefunden, was die Ursache war? Ich suche jetzt auch eine Antwort. – Rondo
Nicht so weit :(Entschuldigung – jinglesthula