sys.stderr是Python3中的块设备还是字符设备?

时间:2013-01-10 02:24:51

标签: python c linux buffer device

用C语言编写如下代码:

#include <stdio.h>
#include <unistd.h>
int main() 
{
    while(1)
    {
        fprintf(stdout,"hello-std-out");
        fprintf(stderr,"hello-std-err");
        sleep(1);
    }
    return 0;
}

不会显示标准输出,因为它是一个块设备。但是会显示stderr,因为它不是。

但是,如果我在 Python3

中编写类似的代码
import sys
import time
if __name__ == '__main__':
    while True:
        sys.stdout.write("hello-std-out")
        sys.stderr.write("hello-stderr")
        time.sleep(1)

如果我不刷新这些缓冲区,则不会显示stdout和stderr。这是否意味着sys.stderr也是Python中的块设备?

1 个答案:

答案 0 :(得分:4)

如果你没有看到stderr,那么你在Python3上,当连接到tty和block-bufferred时,文本IO层是行缓冲的,否则无论-u选项如何。

缓冲区问题与字符/块设备无关。