exec 的 stdout 和 stderr 触发条件有什么区别?

为什么有的命令会从stdout输出,有的命令会从stderr,他们有什么区别呢?

如何知道某个命令输出走的是stdout还是stderr呢?

const exec = require('child_process').exec;

const cp = exec(cmd);
cp.stdout.on('data', (data) => {};
cp.stderr.on('data', (data) => {};
阅读 2.5k
1 个回答

绝大多数情况下的 CLI 应用都还是把正常的输出都输出到 stdout 也即标准输出
而错误信息, 调试信息和小部分 CLI 应用的帮助信息会输出到 stderr 即标准错误输出

你想不清楚到底应该处理 stdout 还是 stderr 时可以考虑干脆把 stderr 重定向到 stdout, 就是这样:

/some_application 2>&1

有个细节要留意是一般来说 stdout 有行缓冲, stderr 则是逐字符的, 所以如果你采用重定向的方案, 而应用同时用到了这两个输出, 有可能 stderr 的文本会出现在 stdout 的前面

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题