При написании подручных консольных криптов неизбежно встаёт вопрос, а как запускать внешнюю программу так, чтобы не потерять её вывод. Ситуация осложняется тем, что вывод может быть сложнее, нежели просто груда текста. К примеру 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
тоже пробрасывается.