我如何将长字符串通过 Node.js 中的 child_process.spawn() 进行管道传输?
How do i pipe a long string to via child_process.spawn() in Node.js?
我正在使用 S3fs.readFile 从 s3 存储桶中读取 pdf 文本,我想得到结果,转换为字符串并立即打开一个 spawn child_process 调用 pdftotext,传递字符串:
S3Fs.readFile('./my-pdf-in-s3-bucket', {encoding: 'binary'}, (error, result) => {
mychild = child_process.spawn('pdftotext', [
result.Body
]);
});
这导致生成进程中断,因为字符串太长,我不想将文件保存在磁盘中只是为了再次读取它。
可以吗?
谢谢!
pdftotext 应该允许从 stdin 读取和写入 stdout(至少它对我适用于 v0.41.0),所以你可以这样做:
S3Fs.readFile('./my-pdf-in-s3-bucket', (err, result) => {
if (err) throw err; // Handle better
var cp = child_process.spawn('pdftotext', [ '-', '-' ]);
cp.stdout.pipe(process.stdout);
cp.on('close', (code, signal) => {
console.log(`pdftotext finished with status ${code}`);
});
cp.stdin.end(result);
});
或者可能更好,您可以将文件流式传输到子进程,而不是先在内存中缓冲其全部内容:
var cp = child_process.spawn('pdftotext', [ '-', '-' ]);
var rs = S3Fs.createReadStream('./my-pdf-in-s3-bucket');
rs.on('error', (err) => {
cp.kill();
});
cp.stdout.pipe(process.stdout);
cp.on('close', (code, signal) => {
console.log(`pdftotext finished with status ${code}`);
});
rs.pipe(cp.stdin);
我正在使用 S3fs.readFile 从 s3 存储桶中读取 pdf 文本,我想得到结果,转换为字符串并立即打开一个 spawn child_process 调用 pdftotext,传递字符串:
S3Fs.readFile('./my-pdf-in-s3-bucket', {encoding: 'binary'}, (error, result) => {
mychild = child_process.spawn('pdftotext', [
result.Body
]);
});
这导致生成进程中断,因为字符串太长,我不想将文件保存在磁盘中只是为了再次读取它。
可以吗?
谢谢!
pdftotext 应该允许从 stdin 读取和写入 stdout(至少它对我适用于 v0.41.0),所以你可以这样做:
S3Fs.readFile('./my-pdf-in-s3-bucket', (err, result) => {
if (err) throw err; // Handle better
var cp = child_process.spawn('pdftotext', [ '-', '-' ]);
cp.stdout.pipe(process.stdout);
cp.on('close', (code, signal) => {
console.log(`pdftotext finished with status ${code}`);
});
cp.stdin.end(result);
});
或者可能更好,您可以将文件流式传输到子进程,而不是先在内存中缓冲其全部内容:
var cp = child_process.spawn('pdftotext', [ '-', '-' ]);
var rs = S3Fs.createReadStream('./my-pdf-in-s3-bucket');
rs.on('error', (err) => {
cp.kill();
});
cp.stdout.pipe(process.stdout);
cp.on('close', (code, signal) => {
console.log(`pdftotext finished with status ${code}`);
});
rs.pipe(cp.stdin);