44 lines
1.1 KiB
JavaScript
44 lines
1.1 KiB
JavaScript
var childProcess = require('child_process');
|
|
var _ = require('lodash');
|
|
var Promise = require('bluebird');
|
|
var shellQuote = require('shell-quote');
|
|
|
|
function run(cmd, opts) {
|
|
opts = _.merge({
|
|
pipe: true,
|
|
cwd: undefined,
|
|
callback: function(child) {
|
|
// Since we return promise, we need to provide
|
|
// this callback if one wants to access the child
|
|
// process reference
|
|
// Called immediately after successful child process
|
|
// spawn
|
|
}
|
|
}, opts);
|
|
|
|
var child;
|
|
var parts = shellQuote.parse(cmd);
|
|
try {
|
|
child = childProcess.spawn(_.head(parts), _.tail(parts), {
|
|
cwd: opts.cwd,
|
|
stdio: opts.pipe ? "inherit" : null
|
|
});
|
|
} catch (e) {
|
|
return Promise.reject(e);
|
|
}
|
|
opts.callback(child);
|
|
|
|
return new Promise(function(resolve, reject) {
|
|
child.on('error', function(err) {
|
|
reject(err);
|
|
});
|
|
|
|
child.on('close', function(exitCode) {
|
|
resolve(exitCode);
|
|
});
|
|
});
|
|
}
|
|
|
|
module.exports = {
|
|
run: run
|
|
}; |