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