2

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;
}

ブロックデバイスであるため、stdout は表示されません。しかし、そうではないので 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 のブロック デバイスであるということですか?

4

1 に答える 1

4

stderr が表示されない場合は、テキスト IO レイヤーが tty に接続されたときにライン バッファリングされ、それ以外の場合はオプションに関係なくブロック バッファリングされる Python3 を使用してい-uます。

バッファリングの問題は、キャラクター/ブロック デバイスとは関係ありません。

于 2013-01-10T03:14:08.383 に答える