Ich möchte die execSync
Methode verwenden, die in NodeJS 0.12 hinzugefügt wurde, habe aber immer noch die Ausgabe im Konsolenfenster, in dem ich das Node-Skript ausgeführt habe.
Wenn ich beispielsweise ein NodeJS-Skript mit der folgenden Zeile ausführe, möchte ich die vollständige Ausgabe des Befehls rsync "live" in der Konsole sehen:
require('child_process').execSync('rsync -avAXz --info=progress2 "/src" "/dest"');
Ich verstehe, dass dies execSync
die Ausgabe des Befehls zurückgibt und dass ich diese nach der Ausführung auf die Konsole drucken könnte, aber auf diese Weise habe ich keine "Live" -Ausgabe ...
node.js
child-process
Suamikim
quelle
quelle
[0,1,2]
Ich habe verwendet'inherit'
, was gleichbedeutend mit[process.stdin, process.stdout, process.stderr]
oder[0,1,2]
gemäß den Dokumenten istoptions.stdio
Dokumentation: nodejs.org/api/child_process.html#child_process_options_stdio{stdio:'inherit'}
, müssen Sie .toString () hinzufügen und dann console.log manuell mit dem Ergebnis aufrufen. Darüber hinaus erfüllt es nicht einmal die Fragen, die erforderlich sind, um die Befehlsausgabe "live" zu sehen. Ich denke nicht, dass es "viel einfacher" ist, tatsächlich denke ich nicht, dass es überhaupt einfacher ist.Sie können einfach verwenden
.toString()
.Dies wurde auf Node getestet
v8.5.0
, ich bin mir bei früheren Versionen nicht sicher. Laut @etov funktioniert es nichtv6.3.1
- dazwischen bin ich mir nicht sicher.quelle
.execSync()
eineError
Instanz ausgelöst wird.Dies ist mit execSync oder spawnSync nicht möglich, es sei denn, Sie leiten stdout und stderr um, wie in der akzeptierten Antwort angegeben. Ohne stdout und stderr umzuleiten, geben diese Befehle stdout und stderr nur zurück, wenn der Befehl abgeschlossen ist.
Um dies zu tun, ohne stdout und stderr umzuleiten, müssen Sie Spawn verwenden, um dies zu tun, aber es ist ziemlich einfach:
Ich habe einen ls-Befehl verwendet, der Dateien rekursiv auflistet, damit Sie sie schnell testen können. Spawn verwendet als erstes Argument den Namen der ausführbaren Datei, die Sie ausführen möchten, und als zweites Argument ein Array von Zeichenfolgen, die jeden Parameter darstellen, den Sie an diese ausführbare Datei übergeben möchten.
Wenn Sie jedoch auf execSync eingestellt sind und aus irgendeinem Grund stdout oder stderr nicht umleiten können, können Sie ein anderes Terminal wie xterm öffnen und ihm einen Befehl wie den folgenden übergeben:
Auf diese Weise können Sie sehen, was Ihr Befehl im neuen Terminal tut, haben aber dennoch den synchronen Anruf.
quelle