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中的塊設備?
塊/字符名稱與緩衝不嚴格相關。請參閱wikipedia [設備文件](http://en.wikipedia.org/wiki/Device_file)條目。 – 2013-01-10 02:27:44
默認情況下,Python緩衝stdout。你可以使用'-u'標誌強制stdin,stdout和stderr完全無緩衝:'python -u test.py'。 – unutbu
@unutbu我試着添加'-u',但stderr仍然無法顯示 –