При запуске
const { spawn } = require('child_process');
const fetch = require('node-fetch');
async function main() {
const { body } = await fetch('https://i.imgur.com/EhX4JGf.mp4');
const cp = spawn('dd', [ 'bs=1', 'count=128' ]);
body.pipe(cp.stdin);
cp.stdout.pipe(process.stdout);
cp.stderr.pipe(process.stderr);
}
main();
Я получаю
events.js:183
throw er; // Unhandled 'error' event
^
Error: write EPIPE
at _errnoException (util.js:992:11)
at WriteWrap.afterWrite [as oncomplete] (net.js:864:14)
Это, похоже, связано с тем, что дочерний процесс не использует весь ввод (он завершается после использования некоторыхэтого).Если я изменю dd bs=1 count=128
на cat
, это будет работать.
Кроме того, не поймите меня неправильно, я не пытаюсь нарезать первые N байтов потока, dd
используется какпример программы, которая не читает неограниченные данные.(На самом деле я пытаюсь передать файл в fpcalc -
)
РЕДАКТИРОВАТЬ: я пытался игнорировать ошибки EPIPE, как это:
cp.stdin.on('error', err => {
if (err.code !== 'EPIPE') {
throw err;
}
});
Но затем я получил ECONNRESET вместо
Error: read ECONNRESET
at _errnoException (util.js:992:11)
at Pipe.onread (net.js:618:25)