Непредсказуемое поведение функции печати с end = "" в Python 3.6 и 3.7 под Windows - PullRequest
0 голосов
/ 14 февраля 2019

Следующий код работает странно

import time

def test_print_end(EOL):
    for i in range(3):
        print("Processing... ", end=EOL)
        # You may replace ``time.sleep(5)`` with the long-time processing.
        time.sleep(5)
        print("Done")    

print('EOL == ""')
test_print_end(EOL = "")
print('EOL == "\\n"')
test_print_end(EOL = "\n")
  1. Когда EOL == "":

    1. При запуске кода в консоли Spyder он работает предсказуемо: печатает "Processing... ", затем ждет 5 секунд и печатает " Done" в той же строке.
    2. Но в «cmd.exe» он ждет 3 секунды, а затем печатает "Processing... Done" одновременно.
  2. Когда EOL == "\n" работает одинаково в консоли Spyder и cmd.exe: печатает "Processing... ", затем ждет 5 секунд и печатает " Done" в новой строке.

Isэто функция или ошибка?

Моя среда:

  1. ('64bit', 'WindowsPE')
  2. Windows-7-6.1.7601-SP1
  3. Python 3.7.2 (по умолчанию, 11 февраля 2019 г., 14:11:50) [MSC v.1915 64 бит (AMD64)]
  4. Python 3.6.6 (по умолчанию, 28 июня 2018 г., 11: 21: 07) [MSC v.1900 32 бит (Intel)]

1 Ответ

0 голосов
/ 14 февраля 2019

Кажется, что Python ждет, пока текущая строка не будет закончена, прежде чем печатать ее.Это поведение может отличаться в разных версиях или средах.В вашем случае вы можете добавить параметр flush для принудительной печати частичной строки.

То, буферизуется ли вывод, обычно определяется файлом, но если ключевое слово flushаргумент истина, поток принудительно очищен.

print("Processing... ", end=EOL, flush=True)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...