为什么有的命令会从stdout
输出,有的命令会从stderr
,他们有什么区别呢?
如何知道某个命令输出走的是stdout
还是stderr
呢?
const exec = require('child_process').exec;
const cp = exec(cmd);
cp.stdout.on('data', (data) => {};
cp.stderr.on('data', (data) => {};
###绝大多数情况下的 CLI 应用都还是把正常的输出都输出到 stdout
也即标准输出
而错误信息, 调试信息和小部分 CLI 应用的帮助信息会输出到 stderr
即标准错误输出
你想不清楚到底应该处理 stdout
还是 stderr
时可以考虑干脆把 stderr
重定向到 stdout
, 就是这样:
/some_application 2>&1
有个细节要留意是一般来说 stdout
有行缓冲, stderr
则是逐字符的, 所以如果你采用重定向的方案, 而应用同时用到了这两个输出, 有可能 stderr
的文本会出现在 stdout
的前面