summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--doc/api/child_process.markdown8
-rw-r--r--lib/child_process.js13
-rw-r--r--test/common.js5
-rw-r--r--test/simple/test-child-process-spawnsync-input.js17
4 files changed, 29 insertions, 14 deletions
diff --git a/doc/api/child_process.markdown b/doc/api/child_process.markdown
index 8c1d0f035d..e1d6c1f852 100644
--- a/doc/api/child_process.markdown
+++ b/doc/api/child_process.markdown
@@ -628,7 +628,9 @@ process has exited.
* `cwd` {String} Current working directory of the child process
* `input` {String|Buffer} The value which will be passed as stdin to the spawned process
- supplying this value will override `stdio[0]`
- * `stdio` {Array} Child's stdio configuration.
+ * `stdio` {Array} Child's stdio configuration. (Default: 'pipe')
+ - `stderr` by default will be output to the parent process' stderr unless
+ `stdio` is specified
* `env` {Object} Environment key-value pairs
* `uid` {Number} Sets the user identity of the process. (See setuid(2).)
* `gid` {Number} Sets the group identity of the process. (See setgid(2).)
@@ -656,7 +658,9 @@ throw. The `Error` object will contain the entire result from
* `cwd` {String} Current working directory of the child process
* `input` {String|Buffer} The value which will be passed as stdin to the spawned process
- supplying this value will override `stdio[0]`
- * `stdio` {Array} Child's stdio configuration.
+ * `stdio` {Array} Child's stdio configuration. (Default: 'pipe')
+ - `stderr` by default will be output to the parent process' stderr unless
+ `stdio` is specified
* `env` {Object} Environment key-value pairs
* `uid` {Number} Sets the user identity of the process. (See setuid(2).)
* `gid` {Number} Sets the group identity of the process. (See setgid(2).)
diff --git a/lib/child_process.js b/lib/child_process.js
index 1f121d901f..f606224856 100644
--- a/lib/child_process.js
+++ b/lib/child_process.js
@@ -1304,7 +1304,13 @@ function checkExecSyncError(ret) {
function execFileSync(/*command, options*/) {
- var ret = spawnSync.apply(null, arguments);
+ var opts = normalizeSpawnArguments.apply(null, arguments);
+ var inheritStderr = !!!opts.options.stdio;
+
+ var ret = spawnSync(opts.file, opts.args.slice(1), opts.options);
+
+ if (inheritStderr)
+ process.stderr.write(ret.stderr);
var err = checkExecSyncError(ret);
@@ -1318,9 +1324,14 @@ exports.execFileSync = execFileSync;
function execSync(/*comand, options*/) {
var opts = normalizeExecArgs.apply(null, arguments);
+ var inheritStderr = opts.options ? !!!opts.options.stdio : true;
+
var ret = spawnSync(opts.file, opts.args, opts.options);
ret.cmd = opts.cmd;
+ if (inheritStderr)
+ process.stderr.write(ret.stderr);
+
var err = checkExecSyncError(ret);
if (err)
diff --git a/test/common.js b/test/common.js
index d44f0ea110..40f7072832 100644
--- a/test/common.js
+++ b/test/common.js
@@ -214,3 +214,8 @@ exports.mustCall = function(fn, expected) {
return fn.apply(this, arguments);
};
};
+
+exports.checkSpawnSyncRet = function(ret) {
+ assert.strictEqual(ret.status, 0);
+ assert.strictEqual(ret.error, undefined);
+};
diff --git a/test/simple/test-child-process-spawnsync-input.js b/test/simple/test-child-process-spawnsync-input.js
index 2bcf043f80..66b2fa354a 100644
--- a/test/simple/test-child-process-spawnsync-input.js
+++ b/test/simple/test-child-process-spawnsync-input.js
@@ -26,11 +26,6 @@ var util = require('util');
var spawnSync = require('child_process').spawnSync;
-function checkRet(ret) {
- assert.strictEqual(ret.status, 0);
- assert.strictEqual(ret.error, undefined);
-}
-
var msgOut = 'this is stdout';
var msgErr = 'this is stderr';
@@ -50,13 +45,13 @@ if (process.argv.indexOf('spawnchild') !== -1) {
switch (process.argv[3]) {
case '1':
ret = spawnSync(process.execPath, args, { stdio: 'inherit' });
- checkRet(ret);
+ common.checkSpawnSyncRet(ret);
break;
case '2':
ret = spawnSync(process.execPath, args, {
stdio: ['inherit', 'inherit', 'inherit']
});
- checkRet(ret);
+ common.checkSpawnSyncRet(ret);
break;
}
process.exit(0);
@@ -65,7 +60,7 @@ if (process.argv.indexOf('spawnchild') !== -1) {
function verifyBufOutput(ret) {
- checkRet(ret);
+ common.checkSpawnSyncRet(ret);
assert.deepEqual(ret.stdout, msgOutBuf);
assert.deepEqual(ret.stderr, msgErrBuf);
}
@@ -89,7 +84,7 @@ options = {
ret = spawnSync('cat', [], options);
-checkRet(ret);
+common.checkSpawnSyncRet(ret);
assert.strictEqual(ret.stdout.toString('utf8'), options.input);
assert.strictEqual(ret.stderr.toString('utf8'), '');
@@ -99,7 +94,7 @@ options = {
ret = spawnSync('cat', [], options);
-checkRet(ret);
+common.checkSpawnSyncRet(ret);
assert.deepEqual(ret.stdout, options.input);
assert.deepEqual(ret.stderr, new Buffer(''));
@@ -107,7 +102,7 @@ verifyBufOutput(spawnSync(process.execPath, args));
ret = spawnSync(process.execPath, args, { encoding: 'utf8' });
-checkRet(ret);
+common.checkSpawnSyncRet(ret);
assert.strictEqual(ret.stdout, msgOut + '\n');
assert.strictEqual(ret.stderr, msgErr + '\n');