executive
An easy to use wrapper around child_process.spawn
, useful for Cakefiles and the like. Pipes stdout
, stderr
and stdin
so you don't have to. Think of it as a streaming child_process.exec
with a few extra goodies.
Usage
var exec = require('executive');
exec('ls', function(err, out, code) {
});
Arguments are parsed out properly for you:
var exec = require('executive');
exec('ls -AGF Foo\\ bar', function(err, out, code) {
});
Also supports simple serial execution of commands:
var exec = require('executive');
exec(['ls', 'ls', 'ls'], function(err, out, code) {
});
In the case of a failure, no additional commands will be executed:
exec(['ls', 'aaaaa', 'ls'], function(err, out, code) {
});
Commands can also be specified as a list of objects or a mix:
exec([
{
cmd: 'ls',
args: [ '-la' ]
},
'ls -la',
{
cmd: 'ls',
args: [ '-l' ]
},
])
Options
Options may be passed as the second argument to exec and in the case of quiet
and interactive
helper functions exist.
exec('ls', {options: quiet})
and
exec.quiet('ls')
are equivalent.
options.interactive | exec.interactive
default false
If you need to interact with a program (your favorite text editor for instance)
or watch the output of a long running process (tail -f
), or just don't care
about checking stderr
and stdout
, set interactive
to true
:
exec.interactive('vim', function(err, out, code) {
});
options.quiet | exec.quiet
default false
If you'd prefer not to pipe stdin
, stdout
, stderr
set quiet
to false
:
exec.quiet(['ls', 'ls'], function(err, out, code) {
});
options.safe
default true
In case you need to ignore errors during serial execution it's possible to set
safe
to false
:
exec(['ls', 'aaaaaa', 'ls'], {safe: false}, function(err, out, code) {
});
The spawned child process object is accessible when you exec a single program
(not available when using the simple serial execution wrapper):
var exec = require('executive');
child = exec.quiet('ls');
child.stdout.on('data', function(data) {
});
It's especially nice to use in a Cakefile:
exec = require 'executive'
task 'package', 'Package project', ->
exec '''
mkdir -p dist
rm -rf dist/*
cp manifest.json dist
cp -rf assets dist
cp -rf lib dist
cp -rf views dist
zip -r package.zip dist
rm -rf dist
'''.split '\n'