2015-09-26 16 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