问题描述
当使用不换行 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)




















