Я хотел бы использовать execSync
метод, который был добавлен в NodeJS 0.12, но у меня все еще есть вывод в окне консоли, из которого я запускал скрипт Node.
Например, если я запускаю скрипт NodeJS со следующей строкой, я бы хотел видеть полный вывод команды rsync "live" внутри консоли:
require('child_process').execSync('rsync -avAXz --info=progress2 "/src" "/dest"');
Я понимаю, что execSync
возвращает результат команды и что я могу распечатать это на консоли после выполнения, но у меня нет «живого» вывода ...
node.js
child-process
suamikim
источник
источник
[0,1,2]
, чтобы использовать'inherit'
, что эквивалентно[process.stdin, process.stdout, process.stderr]
или[0,1,2]
согласно документамoptions.stdio
документацию: nodejs.org/api/child_process.html#child_process_options_stdio{stdio:'inherit'}
вы должны добавить .toString (), а затем вручную вызвать console.log с результатом. Кроме того, он даже не отвечает требованию вопросов, чтобы увидеть вывод команды "вживую". Я не думаю, что это "намного проще", на самом деле я не думаю, что это вообще проще.Вы можете просто использовать
.toString()
.Это было проверено на Node
v8.5.0
, я не уверен насчет предыдущих версий. По словам @etov , это не работаетv6.3.1
- я не уверен насчет промежуточного.источник
.execSync()
создаетError
экземпляр.Если вы не перенаправите stdout и stderr, как предполагает принятый ответ, это невозможно с execSync или spawnSync. Без перенаправления stdout и stderr эти команды возвращают stdout и stderr только после завершения команды.
Чтобы сделать это без перенаправления stdout и stderr, вам нужно использовать spawn, но это довольно просто:
Я использовал команду ls, которая рекурсивно выводит список файлов, чтобы вы могли быстро их проверить. Spawn принимает в качестве первого аргумента имя исполняемого файла, который вы пытаетесь запустить, а в качестве второго аргумента он принимает массив строк, представляющих каждый параметр, который вы хотите передать этому исполняемому файлу.
Однако, если вы настроены на использование execSync и по какой-то причине не можете перенаправить stdout или stderr, вы можете открыть другой терминал, такой как xterm, и передать ему такую команду:
Это позволит вам увидеть, что ваша команда делает в новом терминале, но при этом иметь синхронный вызов.
источник