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) => {};

回答

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

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

/some_application 2>&1

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

以上是 exec 的 stdout 和 stderr 触发条件有什么区别? 的全部内容, 来源链接: www.h5w3.com/37734.html

回到顶部