Как заставить функцию печати Python выводить на экран?
Это не дубликат Отключить буферизацию вывода - связанный вопрос пытается выполнить небуферизованный вывод, хотя это более общий вопрос Лучшие ответы на этот вопрос слишком сильны или вовлечены для этого (они не являются хорошими ответами для этого), и этот вопрос может быть найден в Google относительным новичком.
Вот моя версия, которая также предоставляет 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()
Любимое решение Дэна! Для 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)
В Python 3 вы можете перезаписать функцию печати со значением по умолчанию flush = True
flush = True
def print(*objects, sep=' ', end='\n', file=sys.stdout, flush=True): __builtins__.print(*objects, sep=sep, end=end, file=file, flush=flush)
Я сделал это так в Python 3.4:
'''To write to screen in real-time''' message = lambda x: print(x, flush=True, end="") message('I am flushing out now...')