Как очистить вывод функции печати? - PullRequest
1023 голосов
/ 23 октября 2008

Как заставить функцию печати Python выводить на экран?

Это не дубликат Отключить буферизацию вывода - связанный вопрос пытается выполнить небуферизованный вывод, хотя это более общий вопрос Лучшие ответы на этот вопрос слишком сильны или вовлечены для этого (они не являются хорошими ответами для этого), и этот вопрос может быть найден в Google относительным новичком.

Ответы [ 14 ]

8 голосов
/ 19 мая 2011

Вот моя версия, которая также предоставляет 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()
7 голосов
/ 16 февраля 2011

Любимое решение Дэна! Для python3 сделайте:

import io,sys
class flushfile:
    def __init__(self, f):
        self.f = f
    def write(self, x):
        self.f.write(x)
        self.f.flush()
sys.stdout = flushfile(sys.stdout)
5 голосов
/ 15 мая 2016

В Python 3 вы можете перезаписать функцию печати со значением по умолчанию flush = True

def print(*objects, sep=' ', end='\n', file=sys.stdout, flush=True):
    __builtins__.print(*objects, sep=sep, end=end, file=file, flush=flush)
4 голосов
/ 06 июня 2015

Я сделал это так в Python 3.4:

'''To write to screen in real-time'''
message = lambda x: print(x, flush=True, end="")
message('I am flushing out now...')
...