[英]How do you pipe a long string to /dev/stdin via child_process.spawn() in Node.js?
[英]How do i pipe a long string to via child_process.spawn() in Node.js?
我正在使用S3fs.readFile從s3存儲桶讀取pdf文本,我想獲取結果,轉換為字符串,然后立即打開一個調用pdftotext的生成child_process,並傳遞字符串:
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);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.