簡體   English   中英

如何在Node.js中通過child_process.spawn()將長字符串傳遞給?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM