1

Я использую 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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .