2 votes

exécuter child_process dans un module node js

Je crée un module de nœud que je veux avoir une fonction appelée cpuUtilization qui appelle un script python et le stdout est retourné.

var sys = require('sys')
var exec = require('child_process').exec;

exports.cpuUtilization = function() {
    exec('./nodeprime/cpuUtilization.py', function (error, stdout, stderr) {
        return(JSON.parse(stdout));
    });
}

0voto

Golo Roden Points 10272

Vous ne recevez pas de résultat en retour de cpuUtilization parce que le return ne s'applique pas à cette fonction, mais au callback à l'intérieur de cette fonction.

Vous devez transformer votre code en code asynchrone et renvoyer le résultat en utilisant également un callback :

exports.cpuUtilization = function (callback) {
  exec('./nodeprime/cpuUtilization.py', function (err, stdout, stderr) {
    if (err) return callback(err);
    callback(null, JSON.parse(stdout));
  });
};

Le bon sens veut que les callbacks de Node.js renvoient (au moins) deux paramètres, le premier étant une instance d'erreur et le second contenant les données réelles.

Vous pouvez maintenant utiliser votre fonction, par exemple :

cpuUtilization(function (err, data) {
  // Do something with data ...
});

En général, je vous recommande de vous familiariser avec les fonctions d'ordre supérieur.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X