Django 視圖函數打印的內容不顯示


  引言

  今天發現一個很詭異的問題,在django項目視圖函數中,使用print,結果打印不出來。由於項目寫了很久,查了很久的,最終還是找到根本原因了。有時候BUG就是在那個毫不起眼的角落里藏着!

  問題

 

 

 

從上圖看視圖函數請求是成功的,並沒有什么毛病,但是百思不得其解,為啥會這樣?

然后加一下日志再看看:

 

 

 日志可以正常顯示,但是打印始終無法顯示。

 

  踩過的坑

  而我換個項目,我其他的項目,嘗試打印,是正常的。唯獨這個項目不行,但是項目運行是正常的,前端操作后端返回的數據也正常。就在這一切看似正常的情況下,這個打印始終不顯示,不僅僅是這個視圖函數,我里面所有視圖函數加了個打印功能都不顯示。后面在一位大神的指點下,嘗試了新建項目,重新弄一次,還是不行。最后只有一步一步注釋的去找原因。結果最終還是找到原因。

  解決

  根本原因是我封裝了某模塊,模塊里面寫了兩行代碼引起的。

import io
import sys
sys.stdout = io.TextIOWrapper(sys.stdout.buffer,encoding='utf-8')

  嘗試這注釋后,結果就打印出來。

 

 

 

這是為啥呢? 這兩個代碼其實是改變輸出方式,當我們需要打印一些字符時,並不是立刻就打印,而是先將需要打印的字符放入緩沖區,在緩沖區刷新時打印,當緩沖區未滿,或者程序運行未結束時,可使用sys.stdout.flush()強制刷新緩沖區,立刻進行打印。

  總結

  這個坑我躺了差不多6個小時,有時候自己寫代碼的時候,一定要謹慎,並且備注一定要有,不然過了很長一段時間,你再來維護代碼,你發現了bug,如果是一些奇葩的,會消耗你很多時間。雖然這看似是個小問題,但是耗了我太長時間,所以記錄一下,希望能給遇到同樣問題的小伙伴帶來幫助。

   如果對python測試開發相關技術感興趣的伙伴,歡迎加入測試開發學習交流QQ群:696400122,不積跬步,無以至千里。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM