问题描述
当使用不换行 print 即 print(‘test', end='') 后立即关闭标准输出 sys.stdout = open(os.devnull, 'w')则 print 的内容不会显示在正常的终端上(例外是 PyCharm 中的终端能够正常显示)。
复现问题
复现该问题的简易代码:
import sys, os, time
while True:
sys.stdout = sys.__stdout__
print('test', end='')
sys.stdout = open(os.devnull, 'w')
time.sleep(1)
PyCharm 终端的情况:

普通终端的情况(包括 cmd,powershell,bash;无论是否使用交互模式,都存在该现象):

注意看上面两个图片中^C的位置:
- PyCharm 终端中的输出符合预期,是在代码运行后每秒打印一个
test,直到发送中断指令。 - 普通终端中,代码运行后没有任何输出,发送中断指令后瞬间打印出数个
test。
解决
造成两种终端输出差异的原因未知,但可通过指定print的flush=True解决该问题。
import sys, os, time
while True:
sys.stdout = sys.__stdout__
print('test', end='', flush=True)
sys.stdout = open(os.devnull, 'w')
time.sleep(1)

博客主要探讨Python不换行print在终端不显示的问题。使用不换行并立即关闭标准输出时,内容在普通终端(如cmd、powershell、bash)不显示,PyCharm终端能正常显示。复现问题的代码显示,普通终端运行代码无输出,中断后瞬间打印,可指定方法解决,原因未知。
3421

被折叠的 条评论
为什么被折叠?



