Неожиданное поведение вывода консоли 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-последовательностей форматирования терминала, оно не учитывает возврат каретки. Курсор перемещается на строку на терминале, и эта вычисленная строка вывода записывается, в результате чего вы видите.

Другие вопросы по тегам