Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
647 views
in Technique[技术] by (71.8m points)

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

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

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

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

/some_application 2>&1

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


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...