pur
Version:
Alias and glob powered multi-threaded shell execution
54 lines (45 loc) • 1.3 kB
JavaScript
;
exports.run = run;
exports.spawn = spawn;
var _child_process = require('child_process');
var child_process = _child_process;
/**
* Run a shell command
* @param {string} cmd
* @return {Promise<stdout, stderr>} Promise with standard output and error results
*/
function run(cmd) {
return new Promise(function (res, rej) {
child_process.exec(cmd, function (error, stdout, stderr) {
if (error !== null) {
rej(error);
} else {
res(stdout, stderr);
}
});
});
}
/**
* Spawn a subprocess
* @param {string} cmd
* @param {function(string)} stdoutCb
* @param {function(string)} stdinCb
* @param {function(string)} stderrCb
* @param {string} cwd
* @return {Process}
*/
function spawn(cmd, args, stdoutCb, stdinCb, stderrCb, cwd) {
var originalCwd = process.cwd();
process.chdir(cwd);
var childProcess = child_process.spawn(cmd, args, {});
childProcess.stdout.on('data', function (data) {
return stdoutCb(String(data));
});
childProcess.stdin.on('data', function (data) {
return stdinCb(String(data));
});
childProcess.stderr.on('data', function (data) {
return stderrCb(String(data));
});
process.chdir(originalCwd);
}