我注意到,在我使用打印語句時,它不會立即打印。我發現你可以使用sys.stdout.flush()
使它顯示控制檯中的打印。Python立即打印?
這是從腳本獲得即時反饋的正確方法,還是有更好的方法嗎?
我主要是想調試。我有一個掛起,並試圖找到代碼停滯的地方,但由於我的打印聲明沒有顯示出來,我在錯誤的地方搜索,認爲我的代碼沒有得到打印聲明。 (我終於發現它帶有斷點,這也許是更好的調試方式,但打印即時打印有時更方便。)
我注意到,在我使用打印語句時,它不會立即打印。我發現你可以使用sys.stdout.flush()
使它顯示控制檯中的打印。Python立即打印?
這是從腳本獲得即時反饋的正確方法,還是有更好的方法嗎?
我主要是想調試。我有一個掛起,並試圖找到代碼停滯的地方,但由於我的打印聲明沒有顯示出來,我在錯誤的地方搜索,認爲我的代碼沒有得到打印聲明。 (我終於發現它帶有斷點,這也許是更好的調試方式,但打印即時打印有時更方便。)
stdout何時以及何時刷新本身取決於打印功能的實現方式重新使用,你正在嘗試打印的字符串,可能是操作系統等。
有趣的是,stdout似乎在刷新換行符時刷新,但我並不總是相信它,或者我不會直到運行時才知道我的字符串是否包含換行符,所以我在C,Java和Python中定期使用flush()
,因爲我想確保立即打印某些內容,並且我不太在意性能。我發現這些特別有用的地方(例如,消息的時間真的很重要)是:在代碼的多線程部分中,可能會在阻止IO調用之前拋出異常的近代碼。
作爲一個實際的例子,這樣的事情似乎是flush()
自然的使用(抱歉,這是在C++而不是Python)的
printf("Connecing to IP Camera at %s...", ipCamAddr);
cout.flush();
// open a network connection to the camera
printf("Done!\n");
因爲沒有沖洗,將舉行第一個字符串,直到它得到\n
,這是之後連接成功/失敗。
這可能已經在這裏回答了:http://stackoverflow.com/questions/107705/disable-output-buffering –
我認爲打印測試可以,但真正的調試是有斷點和老式的日誌文件 –
如果stdout是一個終端,'print'輸出應該立即顯示出來。 – user2357112