2012-10-17 72 views
57

在node.js中,我想找到一種方法來獲取Unix終端命令的輸出。有沒有辦法做到這一點?在node.js中獲取shell命令的輸出

function getCommandOutput(commandString){ 
    //now how can I implement this function? 
    //getCommandOutput("ls") should print the terminal output of the shell command "ls" 
} 
+0

這是一個重複的,或者它描述完全不同的東西? http://stackoverflow.com/questions/7183307/node-js-execute-command-synchronously-and-get-result –

+0

[This](http://davidwalsh.name/sync-exec)可能會讓你感興趣。 – benekastah

回答

80

多數民衆贊成在我現在工作的項目中做到這一點。

var exec = require('child_process').exec; 
function execute(command, callback){ 
    exec(command, function(error, stdout, stderr){ callback(stdout); }); 
}; 

例子:獲取git的用戶

module.exports.getGitUser = function(callback){ 
    execute("git config --global user.name", function(name){ 
     execute("git config --global user.email", function(email){ 
      callback({ name: name.replace("\n", ""), email: email.replace("\n", "") }); 
     }); 
    }); 
}; 
+0

'上刪除了'.exec'部分後就可以使用這個函數返回命令的輸出了嗎? (這就是我想要做的。) –

+1

多數民衆贊成在代碼做什麼。看看編輯中的示例我剛剛製作了 – renatoargh

+2

@AndersonGreen您不希望該功能通過「返回」鍵盤正常返回,因爲它正在異步運行shell命令。因此,最好傳遞一個回調代碼,這個代碼應該在shell命令完成時運行。 –

18

您正在尋找child_process

var exec = require('child_process').exec; 
var child; 

child = exec(command, 
    function (error, stdout, stderr) { 
     console.log('stdout: ' + stdout); 
     console.log('stderr: ' + stderr); 
     if (error !== null) { 
      console.log('exec error: ' + error); 
     } 
    }); 

正如指出的雷納託,也有一些同步的exec包在那裏現在也看到sync-exec這可能是更多的什麼yo're尋找。請記住,node.js被設計成一個單線程高性能網絡服務器,所以如果這就是你想要使用它的地方,那麼遠離sync-exec還有一些東西,除非你只在啓動時使用它或者其他的東西。

+1

在這種情況下,我如何獲得命令的輸出?是包含命令行輸出的「stdout」嗎? –

+0

另外,是否有可能做類似的事情,而不使用回調? –

+0

正確,標準輸出包含程序的輸出。不,沒有回調就無法做到。 node.js中的所有東西都是以非阻塞爲導向的,這意味着每次執行IO時都將使用回調函數。 – hexist

相關問題