运行时
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)