最佳答案
我需要连续运行两个命令,这两个命令需要从同一个流中读取数据。 当一个数据流通过管道传输到另一个数据流之后,缓冲区就会被清空,所以我不能再从那个数据流中读取数据,所以这个方法不起作用:
var spawn = require('child_process').spawn;
var fs = require('fs');
var request = require('request');
var inputStream = request('http://placehold.it/640x360');
var identify = spawn('identify',['-']);
inputStream.pipe(identify.stdin);
var chunks = [];
identify.stdout.on('data',function(chunk) {
chunks.push(chunk);
});
identify.stdout.on('end',function() {
var size = getSize(Buffer.concat(chunks)); //width
var convert = spawn('convert',['-','-scale',size * 0.5,'png:-']);
inputStream.pipe(convert.stdin);
convert.stdout.pipe(fs.createWriteStream('half.png'));
});
function getSize(buffer){
return parseInt(buffer.toString().split(' ')[2].split('x')[0]);
}
Request 对此表示不满
Error: You cannot pipe after data has been emitted from the response.
当然,将 InputStream改为 fs.createWriteStream
也会产生同样的问题。
我不想写入一个文件,但 重复使用在某种程度上的流,请求生成(或任何其他为此事)。
有没有一种方法可以在可读流完成管道后重用它? 完成上面这个例子的最佳方法是什么?