Node.js 节点子进程在stderr中为mongodump提供有效输出
我正在从nodejsNode.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',
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将输出视为stderrmongodump
将日志消息写入stderr
,这并不少见,尽管这会使解析输出错误变得更困难,因为您需要手动过滤错误消息。他们这样做的原因是什么?您说过这样做并不罕见,您能告诉我为什么吗?mongodump
有一个选项可以转储到stdout
,因此日志消息会干扰这一点,因此使用stderr
。许多将输出写入标准输出的工具(或有选项)都使用这种约定。