使用现有的全局变量在Node.js中执行命令行参数?

时间:2015-09-26 10:48:56

标签: javascript node.js child-process

我在命令行中执行某些操作:

var exec = require('child_process').exec;
var cmd = 'some command';

exec(cmd, function(error, stdout, stderr) {
  console.log(error);
  console.log(stdout);
  console.log(stderr);
});

它运作良好,但它似乎没有父母的范围。例如,我有一个$app全局变量,可以在调用函数中使用。

但是在某些命令中'我跑它不可用。有没有办法传递这个?基本上我想在我的子命令行命令中访问$app

1 个答案:

答案 0 :(得分:4)

传递参数:

您应该可以执行以下操作:

var options = {
    env : process.env
}

exec(cmd, options, function (error, stdout, stderr) {
    //...
});

这将使您可以访问父级的所有环境变量。

即使未设置环境变量,您也可以在父节点程序中动态创建一个,例如:

// in parent program before calling exec.
process.env.userInputtedName = "Joe";

现在,孩子可以访问该环境变量。

请参阅 child_process.exec documentation

传递对象:

如果您希望将对象从父对象传递给子对象,则可以使用JSON函数进行编码和解码,例如

process.env.details = JSON.stringify({
   custom : 'object',
   containing : [ 'complex', 'structures' ] 
});
var options = {
    env : process.env
};

然后解码子程序中的JSON(例如JS):

var importedObject = JSON.parse(process.env.details);

对于更多涉及的进程间通信,您可能需要查看网络库,例如net或zeroMQ。