我该如何强制Python的print
函数将缓冲输出刷新到屏幕上?
另请参阅:如果目标是通常更改缓冲行为,请使用禁用输出缓冲。本问题是关于在特定print
调用后显式刷新输出,尽管仍在缓冲输出。
对于重复关闭者:如果初学者正在询问有关尝试使输出立即出现而不使用结尾换行符的问题,请使用为什么没有结尾换行符时,终端上的打印输出不会立即显示?来关闭问题。当前问题不够好,因为提问者很可能没有概念缓冲或刷新;另一个问题旨在首先解释这些概念,而这个问题涉及技术细节。
我该如何强制Python的print
函数将缓冲输出刷新到屏幕上?
另请参阅:如果目标是通常更改缓冲行为,请使用禁用输出缓冲。本问题是关于在特定print
调用后显式刷新输出,尽管仍在缓冲输出。
对于重复关闭者:如果初学者正在询问有关尝试使输出立即出现而不使用结尾换行符的问题,请使用为什么没有结尾换行符时,终端上的打印输出不会立即显示?来关闭问题。当前问题不够好,因为提问者很可能没有概念缓冲或刷新;另一个问题旨在首先解释这些概念,而这个问题涉及技术细节。
这是我的版本,它还提供了writelines()和fileno():
class FlushFile(object):
def __init__(self, fd):
self.fd = fd
def write(self, x):
ret = self.fd.write(x)
self.fd.flush()
return ret
def writelines(self, lines):
ret = self.writelines(lines)
self.fd.flush()
return ret
def flush(self):
return self.fd.flush
def close(self):
return self.fd.close()
def fileno(self):
return self.fd.fileno()
'''To write to screen in real-time'''
message = lambda x: print(x, flush=True, end="")
message('I am flushing out now...')
我最初很难理解flush选项是如何工作的。我想要做一个“加载显示”,这里是我找到的解决方案:
for i in range(100000):
print('{:s}\r'.format(''), end='', flush=True)
print('Loading index: {:d}/100000'.format(i+1), end='')