使用带有clis的命名流而不支持stdin

时间:2016-08-24 01:35:41

标签: node.js bash stream stdin child-process

我正在使用以下代码从网上读取pdf并传递给pdftotext而不将其保存在本地文件系统中:

const source = 'http://static.googleusercontent.com/media/research.google.com/en//archive/gfs-sosp2003.pdf'
const http = require('http')
const spawn = require('child_process').spawn

download(source).then(pdftotext)
.then(result => console.log(result.slice(0, 77)))

function download(url) {
  return new Promise(resolve => http.get(url, resolve))
}

function pdftotext(binaryStream) {
  //read input from stdin and write to stdout
  const command = spawn('pdftotext', ['-', '-'])
  binaryStream.pipe(command.stdin)

  return new Promise(resolve => {
    const result = []
    command.stdout.on('data', chunk => result.push(chunk.toString()))
    command.stdout.on('end', () => resolve(result.join('')))
  })
}

在这个例子中,它会起作用,因为pdftotext支持stdin,但如果不是这样,我该怎么办?我写了关于命名流的文章,但没有找到任何关于它的信息。

提前致谢!

0 个答案:

没有答案