При написании подручных консольных криптов неизбежно встаёт вопрос, а как запускать внешнюю программу так, чтобы не потерять её вывод. Ситуация осложняется тем, что вывод может быть сложнее, нежели просто груда текста. К примеру ffmpeg
рисует что-то вроде progressbar-а в поледней строке выдачи. Помимо прочего не хочется терять цвета.
Стандартная библиотека предоставляет ряд методов для запуска сторонних программ. Я перебрал несколько из них, но всё как-то мимо. К примеру при ручном перенаправлении spawn
-а за счёт pipe
в process.stdout
выдачи я не добился. При ручной обработке on(‘data’,
нет цветной выдачи и затирания уже отрисованного текста. Ну и т.д.
Как обычно великий stackoverflow помог:
require('child_process').spawn('ffmpeg', [ '-i', fname, '-f', ext, '-vcodec', vcodec, '-acodec', acodec, '-ss', fromS, '-to', endS, result ], { stdio: 'inherit' });
Весь рецепт в третьем параметре ― { stdio: ‘inherit’ }
!
UPD0. Помимо цветного вывода и затирания текста прекрасно работает пользовательский ввод (пример: ffmpeg
спрашивает перезаписать ли сущ-ий файл). Получается, что stdin
тоже пробрасывается.