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:
var spawn = require('child_process').spawn;
//kick off process of listing files
var child = spawn('ls', ['-l', '/']);
//spit stdout to screen
child.stdout.on('data', function (data) { process.stdout.write(data.toString()); });
//spit stderr to screen
child.stderr.on('data', function (data) { process.stdout.write(data.toString()); });
child.on('close', function (code) {
console.log("Finished with code " + code);
});
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:
var execSync = require('child_process').execSync;
execSync("xterm -title RecursiveFileListing -e ls -latkR /");
Auf diese Weise können Sie sehen, was Ihr Befehl im neuen Terminal tut, haben aber dennoch den synchronen Anruf.