在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中的块设备?
如果你没有看到stderr,那么你在Python3上,当连接到tty和block-bufferred时,文本IO层被line-bufferred,否则不管-u
选项。
缓冲区问题与字符/块设备无关。