node.js führt den Systembefehl synchron aus
Muss ich in der node.js Funktion
result = execSync('node -v');
wird synchron führen Sie die angegebene Befehlszeile und gib alle stdout ' ed indem das Befehl text.
ps. Sync falsch ist. Ich weiß. Nur für den persönlichen Gebrauch.
UPDATE
Nun haben wir mgutz die Lösung, die uns die exit-code, aber nicht stdout! Warten immer noch auf eine genauere Antwort.
UPDATE
mgutz aktualisiert seine Antwort und die Lösung ist hier 🙂
Auch, als dgo.ein erwähnt, gibt es stand-alone-Modul exec-sync
UPDATE 2014-07-30
ShellJS lib angekommen. Betrachten Sie dies ist die beste Wahl für jetzt.
UPDATE 2015-02-10
ENDLICH! NodeJS 0.12 unterstützt execSync
nativ.
Siehe offizielle docs
InformationsquelleAutor der Frage disfated | 2010-12-14
Du musst angemeldet sein, um einen Kommentar abzugeben.
Node.js (seit version 0.12 - also für eine Weile) unterstützt
execSync
:Können Sie jetzt direkt hierzu:
und es werde tun, was Sie erwarten. (Standardmäßig pipe-i/o-Ergebnisse an den parent-Prozess). Beachten Sie, dass Sie auch
spawnSync
jetzt.InformationsquelleAutor der Antwort Benjamin Gruenbaum
Sehen execSync Bibliothek.
Es ist ziemlich einfach zu tun mit Knoten-ffi. Ich würde nicht empfehlen für server-Prozesse, sondern auch für die Allgemeine Entwicklung Dienstprogramme, die Sie bekommt Dinge geschafft. Installieren Sie die Bibliothek.
Beispiel-Skript:
[BEARBEITEN Jun 2012: Wie man STDOUT]
InformationsquelleAutor der Antwort mgutz
Verwenden ShellJS Modul.
exec Funktion ohne Angabe Rückruf.
Beispiel:
InformationsquelleAutor der Antwort falko
Gibt es ein ausgezeichnetes Modul für die Ablaufsteuerung in node.js genannt asyncblock. Wenn das einwickeln der code in einer Funktion ist OK, für Ihren Fall, wird das folgende Beispiel betrachtet werden kann:
InformationsquelleAutor der Antwort nab
Ist dies nicht möglich Node.js beide
child_process.spawn
undchild_process.exec
wurden von Grund auf neu gebaut werden, async.Einzelheiten finden Sie unter: https://github.com/ry/node/blob/master/lib/child_process.js
Wenn Sie wirklich wollen, um diese zu blockieren, dann legen Sie alles, was passieren muss, um anschließend in einem Rückruf oder bauen Sie sich Ihren eigenen queue zu behandeln, das in einer blocking-Mode, ich vermute, Sie könnte verwenden Async.js für diese Aufgabe.
Oder, im Falle Sie haben viel zu viel Zeit zu verbringen, zu hacken um in Node.js es sich von selbst.
InformationsquelleAutor der Antwort Ivo Wetzel
Dies ist der einfachste Weg, die ich gefunden habe:
InformationsquelleAutor der Antwort
Nur hinzufügen, dass, obwohl gibt es nur wenige usecases, wo Sie sollten Sie verwenden,
spawnSync
/execFileSync
/execSync
wurden Hinzugefügt node.js in diesen verpflichtet: https://github.com/joyent/node/compare/d58c206862dc...e8df2676748eInformationsquelleAutor der Antwort kvz
Können Sie erreichen dies mit Fasern. Zum Beispiel, mit meinem Allgemeine Knoten-Bibliothekwürde der code wie folgt Aussehen:
InformationsquelleAutor der Antwort Oleg
Bekomme ich verwendet, um zu implementieren
"synchronous"
Zeug am Ende der callback-Funktion. Nicht sehr schön, aber es funktioniert. Wenn Sie implementieren müssen, um eine Sequenz von Befehlszeilen-Ausführungen müssen Sie wrapexec
in einigen benannten Funktion und rekursiv aufrufen.Dieses Muster scheint brauchbar, für mich:
InformationsquelleAutor der Antwort scherka
Ich hatte ein ähnliches problem und ich landete schriftlich ein-Knoten-Erweiterung für diese. Sie können check aus dem git-repository. Es ist open source und kostenlos, und all das gute Zeug !
https://github.com/aponxi/npm-execxi
Gebrauchsanweisungen sind in der ReadMe-Datei. Fühlen Sie sich frei, pull-requests oder Probleme melden!
EDIT:
Allerdings spielt es keine Rückkehr der stdout noch... Nur Ausgänge in Echtzeit.Sie Es jetzt tut. Gut, ich habe gerade freigegeben, es heute. Vielleicht können wir darauf aufbauen.Sowieso, ich dachte, es war es Wert, es zu erwähnen.
InformationsquelleAutor der Antwort Logan
können Sie tun, synchron-shell-Operationen in nodejs etwa so:
BEARBEITEN - dieses Beispiel ist gedacht für windows-Umgebungen passen Sie für Ihre eigenen linux braucht, wenn notwendig
InformationsquelleAutor der Antwort Marcus Pope
Eigentlich hatte ich eine situation, wo ich brauchte, um mehrere Befehle nacheinander aus einem Paket.json-preinstall-Skript in einer Weise, die funktionieren würde, ist auf Windows-und Linux/OSX, so konnte ich nicht verlassen sich auf eine non-core-Modul.
Also das ist, was ich kam mit:
Können Sie es verwenden, wie diese:
EDIT: wie hingewiesen, das es eigentlich nicht zurückgeben, die Ausgabe oder können Sie das Ergebnis der Befehle in einem Knoten-Programm. Eine andere Idee ist die Verwendung von LiveScript backcalls. http://livescript.net/
InformationsquelleAutor der Antwort Jason Livesay