A better
child_process
stdout.trim()
.$ npm install execa
const execa = require('execa'); (async () => { const {stdout} = await execa('echo', ['unicorns']); console.log(stdout); //=> 'unicorns' })();
Additional examples:
const execa = require('execa'); (async () => { // Pipe the child process stdout to the current stdout execa('echo', ['unicorns']).stdout.pipe(process.stdout); // Run a shell command const {stdout} = await execa.shell('echo unicorns'); //=> 'unicorns' // Catching an error try { await execa.shell('exit 3'); } catch (error) { console.log(error); /* { message: 'Command failed: /bin/sh -c exit 3' killed: false, code: 3, signal: null, cmd: '/bin/sh -c exit 3', stdout: '', stderr: '', timedOut: false } */ } })(); // Catching an error with a sync method try { execa.shellSync('exit 3'); } catch (error) { console.log(error); /* { message: 'Command failed: /bin/sh -c exit 3' code: 3, signal: null, cmd: '/bin/sh -c exit 3', stdout: '', stderr: '', timedOut: false } */ }
Execute a file.
Think of this as a mix of child_process.execFile
and child_process.spawn
.
Returns a child_process
instance, which is enhanced to also be a Promise
for a result Object
with stdout
and stderr
properties.
Same as execa()
, but returns only stdout
.
Same as execa()
, but returns only stderr
.
Execute a command through the system shell. Prefer execa()
whenever possible, as it's both faster and safer.
Returns a child_process
instance.
The child_process
instance is enhanced to also be promise for a result object with stdout
and stderr
properties.
Execute a file synchronously.
Returns the same result object as child_process.spawnSync
.
This method throws an Error
if the command fails.
Execute a command synchronously through the system shell.
Returns the same result object as child_process.spawnSync
.
Type: Object
Type: string
Default: process.cwd()
Current working directory of the child process.
Type: Object
Default: process.env
Environment key-value pairs. Extends automatically from process.env
. Set extendEnv
to false
if you don't want this.
Type: boolean
Default: true
Set to false
if you don't want to extend the environment variables when providing the env
property.
Type: string
Explicitly set the value of argv[0]
sent to the child process. This will be set to command
or file
if not specified.
Type: string[]
string
Default: pipe
Child's stdio configuration.
Type: boolean
Prepare child to run independently of its parent process. Specific behavior depends on the platform.
Type: number
Sets the user identity of the process.
Type: number
Sets the group identity of the process.
Type: boolean
string
Default: false
If true
, runs command
inside of a shell. Uses /bin/sh
on UNIX and cmd.exe
on Windows. A different shell can be specified as a string. The shell should understand the -c
switch on UNIX or /d /s /c
on Windows.
Type: boolean
Default: true
Strip EOF (last newline) from the output.
Type: boolean
Default: true
Prefer locally installed binaries when looking for a binary to execute.
If you $ npm install foo
, you can then execa('foo')
.
Type: string
Default: process.cwd()
Preferred path to find locally installed binaries in (use with preferLocal
).
Type: string
Buffer
stream.Readable
Write some input to the stdin
of your binary.
Streams are not allowed when using the synchronous methods.
Type: boolean
Default: true
Setting this to false
resolves the promise with the error instead of rejecting it.
Type: boolean
Default: true
Keep track of the spawned process and kill
it when the parent process exits.
Type: string
Default: utf8
Specify the character encoding used to decode the stdout
and stderr
output.
Type: number
Default: 0
If timeout is greater than 0
, the parent will send the signal identified by the killSignal
property (the default is SIGTERM
) if the child runs longer than timeout milliseconds.
Type: boolean
Default: true
Buffer the output from the spawned process. When buffering is disabled you must consume the output of the stdout
and stderr
streams because the promise will not be resolved/rejected until they have completed.
Type: number
Default: 10000000
(10MB)
Largest amount of data in bytes allowed on stdout
or stderr
.
Type: string
number
Default: SIGTERM
Signal value to be used when the spawned process will be killed.
Type: string
number
Stream
undefined
null
Default: pipe
Same options as stdio
.
Type: string
number
Stream
undefined
null
Default: pipe
Same options as stdio
.
Type: string
number
Stream
undefined
null
Default: pipe
Same options as stdio
.
Type: boolean
Default: false
If true
, no quoting or escaping of arguments is done on Windows. Ignored on other platforms. This is set to true
automatically when the shell
option is true
.
Let's say you want to show the output of a child process in real-time while also saving it to a variable.
const execa = require('execa'); const getStream = require('get-stream'); const stream = execa('echo', ['foo']).stdout; stream.pipe(process.stdout); getStream(stream).then(value => { console.log('child output:', value); });
MIT © Sindre Sorhus