2017-10-10 8 views
2

J'essaie d'exécuter un fichier binaire sur linux qui sort via stdout. Si je l'exécute depuis le terminal, j'obtiens un beau flux de données imprimées (près d'une ligne toutes les 50 ms) mais si je le lance depuis un script nodeJS avec child_process.spawn, les données arrivent en morceaux toutes les 5 secondes environ .child_process.spawn stdout venant en morceaux

extrait de code:

const spawn = require('child_process').spawn; 


    // Run all node binaries 
for (let i = 0; i < config.dependencies.length; i++) { 

    // Get details on this binary 
    var repo = config.dependencies[i].name; 
    var version = config.dependencies[i].version; 
    console.log("Running: " + repo + ' version ' + version); 


    // Run this binary 
    node_process[i] = spawn('./'+repo+'/'+repo,[], {stdio: ['pipe', 'pipe', 'pipe']}) 

    node_process[i].stdout.on('data', function(data) { 

    stdout_data=config.dependencies[i].name+ ":"+data.toString(); 
    console.log("Stdout: " + stdout_data) 

}); 
} 

Je pense que j'ai tout est configuré pour imprimer les données en temps réel de stdout, et je suis très confus pour expliquer pourquoi cela ne fonctionne pas comme prévu. Merci les gars!

Répondre

0

Vous l'avez compris! Utilisez cette commande lors de la génération:

spawn('stdbuf', ['-i0', '-o0', '-e0', FilePath]) 

Utilise stdbuf pour le générer sans tampon.