在Node.js模块中执行子进程

2 投票
1 回答
1041 浏览
提问于 2025-04-17 14:54

我正在创建一个Node模块,我想要一个叫做cpuUtilization的函数,这个函数会调用一个Python脚本,并返回它的输出结果。

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

你没有从 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 ...
});

一般来说,我建议你多了解一下高阶函数。

撰写回答