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