How to read child_process.spawnSync stdout with stdio option 'inherit'

nitro-n picture nitro-n · Feb 28, 2016 · Viewed 9.9k times · Source
var childProcess = cp.spawnSync(command, args, {
    cwd: process.cwd(),
    env: process.env,
    stdio: 'inherit',
    encoding: 'utf-8'
});

childProcess.output always eq [null, null, null]

process.stdout.write hook doesn't give me any output

Answer

Trott picture Trott · Feb 29, 2016

If you don't use 'pipe' then childProcess.output will not contain the output.

var cp = require('child_process');

var command = 'echo';
var args = ['hello', 'world'];

var childProcess = cp.spawnSync(command, args, {
    cwd: process.cwd(),
    env: process.env,
    stdio: 'pipe',
    encoding: 'utf-8'
});

console.log(childProcess.output); // [ null, 'hello world\n', '' ]

This is sorta kinda indicated in the documentation for child.stdout and elsewhere, but it's not entirely unambiguous. (By all means, if you wish to see it improved, open a pull request against the Node.js repo.)