用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中的块设备?
答案 0 :(得分:4)
如果你没有看到stderr,那么你在Python3上,当连接到tty和block-bufferred时,文本IO层是行缓冲的,否则无论-u
选项如何。
缓冲区问题与字符/块设备无关。