J'ai besoin d'exécuter deux commandes en série qui doivent lire des données à partir du même flux. Après avoir redirigé un flux dans un autre, le tampon est vidé, donc je ne peux pas lire à nouveau des données à partir de ce flux, donc cela ne fonctionne pas :
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 se plaint de cela
Erreur : Vous ne pouvez pas rediriger après que des données aient été émises de la réponse.
et changer le inputStream en fs.createWriteStream
entraîne bien sûr le même problème. Je ne veux pas écrire dans un fichier mais réutiliser en quelque sorte le flux que request produit (ou tout autre d'ailleurs).
Existe-t-il un moyen de réutiliser un flux lisible une fois qu'il a fini d'être redirigé ? Quel serait le meilleur moyen d'accomplir quelque chose comme l'exemple ci-dessus ?