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