exec child_process在节点js模块中

时间:2013-02-06 02:44:17

标签: python node.js

我正在创建一个节点模块,我想要一个名为cpu的函数,它调用python脚本并返回stdout。

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));
    });
}

1 个答案:

答案 0 :(得分:0)

你从cpuUtilization获取结果,因为return语句不适用于该函数,而是适用于该函数内的回调。

您需要将代码转换为异步代码并使用回调返回结果:

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

常识是Node.js中的回调应该返回(至少)两个参数,其中第一个是错误实例,第二个包含实际数据。

现在您可以使用您的功能,例如:

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

一般来说,我建议你熟悉高阶函数。