функция печати Python в режиме реального времени - PullRequest
12 голосов
/ 18 сентября 2011

Я недавно переключил ОС и использую более новый Python (2.7).В моей старой системе я мог печатать мгновенно.Например, предположим, что у меня был интенсивный цикл for:

for i in range(10):
  huge calculation
  print i

, тогда, когда код завершил каждую итерацию, он вывел бы i

Однако в моей текущей системе python кажетсякэшировать стандартный вывод, чтобы терминал оставался пустым в течение нескольких минут, после чего он печатает:

1
2
3

в короткой последовательности.Затем, через несколько минут, он печатает:

4
5
6

и так далее.Как я могу сделать печать на Python, как только он достигнет оператора print?

Ответы [ 3 ]

12 голосов
/ 26 ноября 2012

Начиная с Python 3.3, вы можете просто передать flush = True в функцию печати. ​​

12 голосов
/ 18 сентября 2011

Попробуйте вызвать сброс stdout после печати

import sys

...
sys.stdout.flush()

Или используйте командную строку параметр -u, который:

Force stdin, stdoutи stderr будет полностью небуферизованным.

2 голосов
/ 18 сентября 2011

Импорт новой функции печати как функции , как в Python 3.x:

from __future__ import print_function

(поместите оператор в верхнюю часть вашего скрипта / модуля)

Это позволяет вам заменить новую функцию печати своей собственной:

def print(s, end='\n', file=sys.stdout):
    file.write(s + end)
    file.flush()

Преимущество состоит в том, что таким образом ваш скрипт будет работать точно так же, когда вы обновляете один день до Python3.x.

Ps1: я не пробовал, но функция печати как функция может просто сбрасываться по умолчанию.

PS2: вытакже может быть интересен мой пример выполнения .

...