Node.js 节点子进程在stderr中为mongodump提供有效输出

Node.js 节点子进程在stderr中为mongodump提供有效输出,node.js,child-process,mongodump,Node.js,Child Process,Mongodump,我正在从nodejschild\u进程执行mongodump命令 我已经尝试了exec和spawn,但是mongodump打印的进度正在命中stderr的data事件,而不是stdout var exec = require('child_process').exec, ls = exec('mongodump --gzip --archive="/home/test-machine/test.archive" --db myDB'); ls.stdout.on('data',

我正在从nodejs
child\u进程执行
mongodump
命令

我已经尝试了
exec
spawn
,但是
mongodump
打印的进度正在命中
stderr
data
事件,而不是
stdout

var exec = require('child_process').exec,
    ls    = exec('mongodump --gzip --archive="/home/test-machine/test.archive" --db myDB');

ls.stdout.on('data', function (data) {
  console.log('stdout: ' + data.toString());
});

ls.stderr.on('data', function (data) {
  console.log('stderr: ' + data.toString());
});

ls.on('exit', function (code) {
  console.log('child process exited with code ' + code.toString());
});

mongodump没有崩溃,也没有抛出任何错误,而是按其应该的方式执行。但不知何故,nodejs将输出视为stderr

mongodump
将日志消息写入
stderr
,这并不少见,尽管这会使解析输出错误变得更困难,因为您需要手动过滤错误消息。

他们这样做的原因是什么?您说过这样做并不罕见,您能告诉我为什么吗?
mongodump
有一个选项可以转储到
stdout
,因此日志消息会干扰这一点,因此使用
stderr
。许多将输出写入标准输出的工具(或有选项)都使用这种约定。