stdout 和 stderr 两个流的区别是啥?

2022-04-19 07:23:08 +08:00
 LeeReamond

一直以来日志都是输出到 stdout 流的,不过最近看了一些项目好像都是输出到 stderr ,搞不太懂为什么要这么做,有大佬来讲一下两个的区别吗?

1848 次点击
所在节点    问与答
5 条回复
ysc3839
2022-04-19 07:47:34 +08:00
分开两个可以实现 stdout 输出数据,stderr 输出错误信息,互不干扰。
一些语言提供的 IO 库封装有缓冲功能,可能会对 stdout 和 stderr 使用不同的缓冲设置
iqfEmhuNidBhDfWo
2022-04-19 07:47:48 +08:00
因为你可能需要将 stdout 通过管道传递给下一个进程,而 stderr 此时就可以拿来显示命令执行状态 /日志
YogiLiu
2022-04-19 07:52:40 +08:00
Codeword
2022-04-19 08:02:47 +08:00
日志输出到 stderr 更符合 POSIX 规范: https://pubs.opengroup.org/onlinepubs/9699919799/functions/stderr.html

其它区别:( C++中) stdout 是行缓冲的,既能往屏幕输出也能重定向到其它目标(如文件),stderr 是无缓冲的,不能被重定向。
如果 log 和正常输出混在一块,将来传递信息给其它进程的时候可能要费力气再去分离。
mekingname
2022-04-19 10:33:33 +08:00
正好我之前写过一篇文章说到这个东西的具体应用场景: https://mp.weixin.qq.com/s/Yzd2YoXNBaHQYivmeHZb_Q

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/847794

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX