在一个的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"
}
在一个的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"
}
这就是我做的一个项目,我现在的工作方式。
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", "") });
});
});
};
您正在寻找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有点儿东西敬而远之或者其他的东西。
如果你晚于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
异步代码中。
由于雷纳托答案,我创建了一个非常简单的例子:
const exec = require('child_process').exec
exec('git config --global user.name', (err, stdout, stderr) => console.log(stdout))
它只是将打印的全球混帐的用户名:)