Выполните и получите вывод команды оболочки в узле.js


в узле.js, я хотел бы найти способ получить вывод команды терминала Unix. Есть ли способ сделать это?

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

4 ответа:

вот как я это делаю в проекте, над которым я сейчас работаю.

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

пример: получение git user

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", "") });
        });
    });
};

вы ищете 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 это может быть больше, что вы ищете. Имейте в виду, узел.js предназначен для однопоточного высокопроизводительного сетевого сервера, поэтому, если это то, для чего вы хотите его использовать, держитесь подальше от sync-exec, если вы не используете его только во время запуска или что-то.

если вы используете node позже 7.6 и вам не нравится стиль обратного вызова, вы также можете использовать node-util's

благодаря ответу Ренато, я создал действительно простой пример:

const exec = require('child_process').exec

exec("git config --global user.name", (err, stdout, stderr) => console.log(stdout))