Hanfei Sun
Hanfei Sun

Reputation: 47051

Is sys.stderr a block device or character device in Python3?

In C language, if I write codes like this:

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

The stdout will not be displayed because it's a block device. But stderr will be displayed because it's not.

However, if I write similar codes in Python3:

import sys
import time
if __name__ == '__main__':
    while True:
        sys.stdout.write("hello-std-out")
        sys.stderr.write("hello-stderr")
        time.sleep(1)

Both stdout and stderr will not be displayed if I don't flush these buffers. Does that mean sys.stderr is also a block device in Python?

Upvotes: 2

Views: 399

Answers (1)

jfs
jfs

Reputation: 414139

If you don't see stderr then you are on Python3 where text IO layer is line-bufferred when connected to a tty and block-bufferred otherwise regardless -u option.

The bufferring issues are unrelated to character/block devices.

Upvotes: 4

Related Questions