Execute and get the output of a shell command in node.js
This is the method I'm using in a project I am currently working on.
var exec = require('child_process').exec;function execute(command, callback){ exec(command, function(error, stdout, stderr){ callback(stdout); });};
Example of retrieving a 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", "") }); }); });};
If you're using node later than 7.6 and you don't like the callback style, you can also use node-util's promisify
function with async / await
to get shell commands which read cleanly. Here's an example of the accepted answer, using this technique:
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 }};
This also has the added benefit of returning a rejected promise on failed commands, which can be handled with try / catch
inside the async code.
You're looking for 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); } });
As pointed out by Renato, there are some synchronous exec packages out there now too, see sync-exec that might be more what yo're looking for. Keep in mind though, node.js is designed to be a single threaded high performance network server, so if that's what you're looking to use it for, stay away from sync-exec kinda stuff unless you're only using it during startup or something.