Если вы не перенаправите stdout и stderr, как предполагает принятый ответ, это невозможно с execSync или spawnSync. Без перенаправления stdout и stderr эти команды возвращают stdout и stderr только после завершения команды.
Чтобы сделать это без перенаправления stdout и stderr, вам нужно использовать spawn, но это довольно просто:
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);
});
Я использовал команду ls, которая рекурсивно выводит список файлов, чтобы вы могли быстро их проверить. Spawn принимает в качестве первого аргумента имя исполняемого файла, который вы пытаетесь запустить, а в качестве второго аргумента он принимает массив строк, представляющих каждый параметр, который вы хотите передать этому исполняемому файлу.
Однако, если вы настроены на использование execSync и по какой-то причине не можете перенаправить stdout или stderr, вы можете открыть другой терминал, такой как xterm, и передать ему такую команду:
var execSync = require('child_process').execSync;
execSync("xterm -title RecursiveFileListing -e ls -latkR /");
Это позволит вам увидеть, что ваша команда делает в новом терминале, но при этом иметь синхронный вызов.