我觉得我被StreamHandler的代码搞糊涂了。如果用户从未需要调用flush()方法,为什么StreamHandler要定义一个非空的、公开记录的实现呢?
我想我过于假设了,并没有考虑继承在这里是如何使用的(啊)。例如,基本的Handler类有一个空的flush()方法,但StreamHandler不想继承它,因为它有一个奇怪的文档字符串“This version does nothing and is intended to be implemented by subclasses”。
stderr
的一个小提示是,它往往默认为无缓冲,而stdout通常默认为行缓冲。我不知道systemd
/journald
,但我认为将任何stderr
捕获/重定向的缓冲更改为相同(无缓冲)是有意义的。 - Ondrej K.openat
相同(除了|O_CLOEXEC
,“不可继承”的fd),但缓冲来自io
模块。 - Ondrej K.