当为Node.js使用child_process.exec时,为什么输出来自STDERR而不是STDOUT?

时间:2014-08-03 16:25:15

标签: javascript node.js phantomjs stdout child-process

我正在尝试将我的phantomjs脚本的结果缓冲到nodejs,但由于某种原因,缓冲区结果不断出现在STDERR而不是STDOUT,即使似乎没有错误。

NodeJS代码:

var exec = require('child_process').exec;
exec('phantomjs console.js', function(stdout, stderr, error){
        if (error !== null) {
            console.log('exec error: ' + error);
        }
        console.log("Standard Output: " + stdout + " ");
        console.log("Error Output: " + stderr + " ");
    });

PhantomJS代码(console.js):

console.log("Hello world!");
phantom.exit();

我得到的结果:

exec error: 
Standard Output: null 
Error Output: Hello world!

1 个答案:

答案 0 :(得分:1)

根据Dan Davis,您有errorstderrstdout已切换 - 而不是console.log语句,但是参数的顺序是功能。以下是the docs

的正确顺序
var exec = require('child_process').exec;
exec('phantomjs console.js', function(error, stdout, stderr){
    if (error !== null) {
        console.log('exec error: ' + error);
    }
    console.log("Standard Output: " + stdout + " ");
    console.log("Error Output: " + stderr + " ");
});

您输出的原因是您的stdout应该是实际的error所在的位置,因此它是空的。您的stderr位于实际stdout的位置,因此收到了输出。您的error位于实际stderr的位置,因此它是空的。