2015-09-26 67 views
3

我执行命令行像这样:使用现有全局变量在Node.js中执行命令行参数?

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

回答

4

传递参数:

你应该能够做这样的事情:

var options = { 
    env : process.env 
} 

exec(cmd, options, funciton (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 
}; 

然后在你的孩子的程序(例如,对于JS)解码JSON:

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

对于你可能想看看在网络libray如net或zeroMQ更复杂的进程间通信。

+0

@Rob:Hi Rob。我已经测试了上述,它完美地工作。这个解决方案是可以接受的还是我误解了你的问题?谢谢 – chriskelly

+0

是的,我看到了,但我需要传入一个完整的对象。使用函数和它自己的环境,而不仅仅是一个变量。我想我没有正确接近它。它实际上只是另一个节点模块(Sequilze),它也带有CLI版本。但在这种情况下,我应该做一个必要的手动尝试拨打电话,而不是使用CLI。 – Rob

+0

@Rob:好的。我不清楚这个问题。我已经更新了它,但它仍然不会让您访问功能。不知道你是否想要控制孩子的父母,但它听起来像你有你的工作削减:) – chriskelly