使用现有的全局变量在 Node.js 中执行命令行参数?
Execute command line argument in Node.js with existing global variables?
我正在命令行中执行某些操作,如下所示:
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
全局变量。
但在 'some command' 我 运行 它是不可用的。有什么办法可以传递这个吗?基本上我想在我的子命令行命令中访问 $app
。
传递参数:
您应该可以执行以下操作:
var options = {
env : process.env
}
exec(cmd, options, function (error, stdout, stderr) {
//...
});
这将使您能够访问 parent 中的所有环境变量。
即使未设置环境变量,您也可以在 parent 节点程序中即时创建一个,例如:
// in parent program before calling exec.
process.env.userInputtedName = "Joe";
child 现在可以访问该环境变量。
见
child_process.exec documentation
通过 objects:
如果是一个 object 你希望将一个 object 从 parent 传递给 child 你可以使用 JSON
函数来编码和解码, 例如
process.env.details = JSON.stringify({
custom : 'object',
containing : [ 'complex', 'structures' ]
});
var options = {
env : process.env
};
然后在你的child程序中解码JSON
(例如JS):
var importedObject = JSON.parse(process.env.details);
对于更复杂的 inter-process 通信,您可能需要查看网络库,例如 net 或 zeroMQ。
我正在命令行中执行某些操作,如下所示:
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
全局变量。
但在 'some command' 我 运行 它是不可用的。有什么办法可以传递这个吗?基本上我想在我的子命令行命令中访问 $app
。
传递参数:
您应该可以执行以下操作:
var options = {
env : process.env
}
exec(cmd, options, function (error, stdout, stderr) {
//...
});
这将使您能够访问 parent 中的所有环境变量。
即使未设置环境变量,您也可以在 parent 节点程序中即时创建一个,例如:
// in parent program before calling exec.
process.env.userInputtedName = "Joe";
child 现在可以访问该环境变量。
见 child_process.exec documentation
通过 objects:
如果是一个 object 你希望将一个 object 从 parent 传递给 child 你可以使用 JSON
函数来编码和解码, 例如
process.env.details = JSON.stringify({
custom : 'object',
containing : [ 'complex', 'structures' ]
});
var options = {
env : process.env
};
然后在你的child程序中解码JSON
(例如JS):
var importedObject = JSON.parse(process.env.details);
对于更复杂的 inter-process 通信,您可能需要查看网络库,例如 net 或 zeroMQ。