A meno che tu non reindirizzi stdout e stderr come suggerisce la risposta accettata, questo non è possibile con execSync o spawnSync. Senza reindirizzare stdout e stderr quei comandi restituiscono stdout e stderr solo quando il comando è completato.
Per fare questo senza reindirizzare stdout e stderr, dovrai usare spawn per farlo, ma è piuttosto semplice:
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);
});
Ho usato un comando ls che elenca ricorsivamente i file in modo da poterlo testare rapidamente. Spawn prende come primo argomento il nome dell'eseguibile che stai cercando di eseguire e come secondo argomento prende una matrice di stringhe che rappresentano ogni parametro che vuoi passare a quell'eseguibile.
Tuttavia, se sei impostato sull'uso di execSync e non riesci a reindirizzare stdout o stderr per qualche motivo, puoi aprire un altro terminale come xterm e passare un comando in questo modo:
var execSync = require('child_process').execSync;
execSync("xterm -title RecursiveFileListing -e ls -latkR /");
Questo ti permetterà di vedere cosa sta facendo il tuo comando nel nuovo terminale ma avere comunque la chiamata sincrona.