Ecrire dans le stdin d'un process avec les pipe

Le problème exposé dans ce sujet a été résolu.

Bonjour à tous,

Je finalise le développement d’un projet et l’un des point restant est le backup des bases de données.

Pour des contraintes technique mes fichiers de backup ne peuvent pas excéder 2 Gio, aussi sachant qu’il existait des logiciel permettant de spliter des fichiers je me suis un peu renseigné et 7zip est en mesure de créer des archive découpée et à le bon goût d’être disponible sous Windows.

J’ai réussi à réaliser le backup avec une ligne de commande:

1
command read db | 7zr a -si -v1900M destination

Le problème est que je souhaite que l’utilisateur puisse réaliser le backup via l’application. Il n’y a pas tellement de problème à executer cette commande via exec en nodejs, le problème ce que je n’ai pas l’état d’avancement du backup ce qui est plutôt frustrant.

Du coup sachant que nodejs incluais la gestion des pipe via les stream je me suis dit que c’était la solution.

L’objectif étant que pendant le transfert des données je compte ce qui passe sur le stream comme sa je peux envoyer un état d’avancement à l’utilisateur.

J’ai donc pu convertir sans aucun problème ma commande de dump de la db en un ReadableStream en revanche je n’arrive pas à balancer correctement ce stream de façon à ce que ma commande 7zip prenne cela en entrée.

Voici mes différentes tentatives:

1
2
const zip = exec(`7zr a -si -v1900M "${destination}"`);
zip.stdin.pipe(res);
1
2
3
exec(`7zr a -si -v1900M "${destination}"`, {
   stdio: [res, 'pipe', 'pipe']
});
1
2
3
4
5
6
7
8
9
spawn(`7zr`, [
        'a',
        '-si',
        '-v1900M',
        `"${destination}"`
    ], {
        stdio: [res, 'pipe', 'pipe']
    }
);

Le résultat est qu’un fichier est bien créé… mais systématiquement vide.

Mon hypothèse c’est que 7zip n’attends pas les données sur le stdin car il ne sais pas qu’il doit les attendre… mais je ne vois pas comment faire pour lui dire.

Pouvez-vous m’aider ?

Merci d’avance
Cordialement, La source.

Edit: Rahh… je cherche depuis hier et je ne vois l’erreur que maintenant >_< juste après avoir poster mon sujet.
J’ai inversé le read et le write dans le pipe… j’aurai du écrire res.pipe(zip.stdin);

Du coup problème réglé ^^

+0 -0
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte