2015-09-30 70 views
1

下面顯示的代碼旨在將當前工作目錄輸出到控制檯。相反,它會輸出「未定義」。爲了獲得這種學習體驗,作爲系統函數的返回值獲得所需的結果非常重要。關於如何使這項工作的任何想法?如何獲取系統命令的輸出作爲函數的返回值?

#!/usr/bin/node 
var child_process = require('child_process'); 
function system(cmd) { 
    child_process.exec(cmd, function (error, stdout, stderr) { 
    return stdout; 
})}; 
console.log(system('pwd')); 
+0

*「爲了這種學習體驗,重要的是我要獲得所需的結果作爲系統函數的返回值。」*這是不可能的。 'child_process.exec'是一個異步進程(這就是爲什麼你必須傳遞一個回調)。有關爲什麼你得到'undefined'(以及如何解決這個問題)的信息,請參閱http://stackoverflow.com/questions/14220321/how-to-return-the-response-from-an-asynchronous-call –

回答

4

exec是異步執行的。將回調傳遞給您的功能,然後設置好。

#!/usr/bin/node 
var child_process = require('child_process'); 

function system(cmd, callback) { 
    child_process.exec(cmd, function (error, stdout, stderr) { 
    //You should handle error or pass it to the callback 
    callback(stdout); 
    }); 
} 

system('pwd', function(output){ 
    console.log(output); 
}); 

這就是你將如何做到這一點,我相信是你在找什麼。

function systemSync(cmd) { 
    return child_process.execSync(cmd).toString(); 
} 

console.log(systemSync("pwd")); 
+0

謝謝。很棒。其實我一直在尋找同步和異步的方式來做這件事,因爲我的頭部纏繞回調時遇到了一些麻煩。所以,你的答案是最有幫助的。謝謝。 – user3311045

相關問題