执行并得到一个shell命令的node.js的输出(Execute and get the outp

2019-06-18 13:41发布

在一个的node.js,我想找到一种方法,以获得一个Unix终端命令的输出。 有没有办法做到这一点?

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

Answer 1:

这就是我做的一个项目,我现在的工作方式。

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


Answer 2:

您正在寻找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包在那里现在也看到同步高管 ,可能是更多的东西yo're寻找。 但请记住,Node.js的设计是一个单线程的高性能网络服务器,因此,如果这就是你希望用它的东西,除非你只在启动时使用它从同步EXEC有点儿东西敬而远之或者其他的东西。



Answer 3:

如果你晚于7.6使用节点和你不喜欢的回调风格,你也可以使用节点UTIL的promisify功能与async / await获得该阅读干净的shell命令。 这里是公认的答案的一个例子,使用这种技术:

const { promisify } = require('util');
const exec = promisify(require('child_process').exec)

module.exports.getGitUser = async function getGitUser () {
  const name = await exec('git config --global user.name')
  const email = await exec('git config --global user.email')
  return { name, email }
};

这也有返回上失败的命令,它可以与处理的拒绝承诺的额外好处try / catch异步代码中。



Answer 4:

由于雷纳托答案,我创建了一个非常简单的例子:

const exec = require('child_process').exec

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

它只是将打印的全球混帐的用户名:)



文章来源: Execute and get the output of a shell command in node.js