2013-01-10 64 views
2

在C語言中,如果我寫這樣的代碼:sys.stderr是Python3中的塊設備還是字符設備?

#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) 

兩個輸出和錯誤不會,如果我不刷新這些緩衝區顯示。這是否意味着sys.stderr也是Python中的塊設備?

+4

塊/字符名稱與緩衝不嚴格相關。請參閱wikipedia [設備文件](http://en.wikipedia.org/wiki/Device_file)條目。 – 2013-01-10 02:27:44

+1

默認情況下,Python緩衝stdout。你可以使用'-u'標誌強制stdin,stdout和stderr完全無緩衝:'python -u test.py'。 – unutbu

+0

@unutbu我試着添加'-u',但stderr仍然無法顯示 –

回答

4

如果你沒有看到stderr,那麼你在Python3中,當連接到tty和block-bufferred時,文本IO層被行緩衝區化,否則不管-u選項。

緩衝環問題與字符/塊設備無關。

相關問題