Поведение печати на Python, которую я не могу понять - PullRequest
2 голосов
/ 05 марта 2011

Мой фрагмент кода выглядит следующим образом:

from time import sleep
for i in xrange(10):
    status = "hello%s" % str(i)
    status = status + chr(8)*(len(status)+1)
    sleep(1)
    print status

, который ведет себя по-разному с

print status

и

print status,

Теперь, когда я использую запятую после print status затем print выводится на стандартный вывод только один раз.то есть после того, как цикл повторяется в последний раз, когда я не ставлю запятую после print status, print выводит на стандартный вывод каждый раз, когда он вызывается (как я и ожидаю).

Я не понимаю, что происходит под ним.Может кто-нибудь объяснить.спасибо:)

Ответы [ 3 ]

5 голосов
/ 05 марта 2011

Консольный терминал является буферизованным строкой, что означает, что буфер консоли будет очищен, когда он найдет символ новой строки \ n, что объясняет поведение, которое вы видите сейчас, потому что когда вы делаете print status, print автоматически печатает символ новой строки, который очищает консольный буфер после печати, но когда вы делаете print status,, печать не добавляет новую строку, поэтому буфер не сбрасывается после печати. ​​

Вот хорошая статья о буферизации надежды, которая может дать вам больше понимания:)

2 голосов
/ 05 марта 2011

Даже с запятой это работает нормально, без новой строки, хотя: http://codepad.org/iXK0o8Cu

Это поведение, как сказано здесь: http://www.ferg.org/projects/python_gotchas.html#contents_item_4

запятая удаляет символ новой строки после печати

1 голос
/ 05 марта 2011

это что-то с буферизацией. Как и в C, если вы печатаете что-то в стандартный вывод, а затем закрываете его, вы должны вызвать fflush (), чтобы очистить буфер для вывода. Если вы импортируете sys в начале и после печати вызываете «sys.stdout.flush ()», это работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...