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,不积跬步,无以至千里。

猜你喜欢

转载自www.cnblogs.com/liudinglong/p/12705855.html