O ile nie przekierujesz stdout i stderr, jak sugeruje zaakceptowana odpowiedź, nie jest to możliwe w przypadku execSync lub spawnSync. Bez przekierowywania stdout i stderr te polecenia zwracają stdout i stderr tylko wtedy, gdy polecenie jest zakończone.
Aby to zrobić bez przekierowywania stdout i stderr, będziesz musiał użyć spawn, aby to zrobić, ale jest to całkiem proste:
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);
});
Użyłem polecenia ls, które rekurencyjnie wyświetla listę plików, dzięki czemu można je szybko przetestować. Spawn przyjmuje jako pierwszy argument nazwę pliku wykonywalnego, który próbujesz uruchomić, a jako drugi argument przyjmuje tablicę ciągów reprezentujących każdy parametr, który chcesz przekazać do tego pliku wykonywalnego.
Jeśli jednak korzystasz z execSync iz jakiegoś powodu nie możesz przekierować stdout lub stderr, możesz otworzyć inny terminal, taki jak xterm, i przekazać mu takie polecenie:
var execSync = require('child_process').execSync;
execSync("xterm -title RecursiveFileListing -e ls -latkR /");
Pozwoli ci to zobaczyć, co robi twoje polecenie w nowym terminalu, ale nadal masz połączenie synchroniczne.