Неожиданное поведение вывода консоли BPython

336
iago-lito

Я использую BPython для запуска скриптов Python, и я обнаружил, что вывод консоли отличается от обычной консоли Python. Например, этот небольшой фрагмент кода:

import time for i in range(100): time.sleep(.1) print("\r{}".format(i), end="") 

Выводы в Python:

99 | >>> | 

но выводит в BPython:

26 | 51 | 75 | 99 | >>> | ^ end of the console 

Эти явно случайные числа зависят только от ширины моей консоли . Я подозреваю, что курсор BPython будет смещаться вправо при каждом вызове, printдаже если строка начинается с \r. Когда он достигает правого края консоли, текущая строка больше не может быть удалена, и поэтому начинается новая строка.

Есть ли способ исправить это?

ОБНОВЛЕНИЕ: (сообщается об ошибке там )

1

1 ответ на вопрос

1
Thomas

Я предлагаю использовать bpython-cursesвместо этого, если вам нужно такое поведение, потому что (как вы заметили) стандартный интерфейс bpython не справляется с этим правильно. Вы примерно правы в своем объяснении: bpython записывает вывод в фальшивый sys.stdout, а затем пытается угадать, как его отобразить. Его предположение очень наивно, и хотя оно учитывает ограниченное число escape-последовательностей форматирования терминала, оно не учитывает возврат каретки. Курсор перемещается на строку на терминале, и эта вычисленная строка вывода записывается, в результате чего вы видите.

Кажется, это то, что мне было нужно. Спасибо! :) iago-lito 9 лет назад 0