Реализация возврата в оболочке Python 3.3.2 с использованием Idle

Здесь есть несколько человек, которые ищут ответы на возврат в Python. Ни один из вопросов, которые я искал, не ответил мне на это, поэтому вот:

Простая цель: иметь возможность распечатать строку состояния в одной строке, где следующий статус перезаписывается первым. Подобно статусу завершения %, где вместо прокрутки длинной строки 1%\n, 2% и т. д. мы просто перезаписываем первую строку самым новым значением.

Теперь вопрос. Когда я набираю это в режиме ожидания: print("a\bc"), я получаю это в качестве вывода: ac с чем-то вроде странного прямоугольника с кружком между буквами «a» и «c». То же самое происходит при использовании sys.stdout.write().

Это настройка/проблема редактора Idle? Кто-нибудь вообще знает, возможно ли то, что я пытаюсь сделать, в Idle Shell?

Спасибо за любое понимание.

PS: Запуск Python 3.3.2 Idle в Windows 7, 64-разрядная система.

РЕДАКТИРОВАТЬ: копирование вывода в Notepad ++ показывает, что Python печатает символ «возврата», а не возвращает пробел. Возможно, то, что я пытаюсь сделать, невозможно?


person Nanomurf    schedule 04.10.2013    source источник
comment
В настоящее время вы не можете получить то, что хотите, в оболочке IDLE. Из-за таких вопросов, как этот, я рассматриваю возможность его изменения.   -  person Terry Jan Reedy    schedule 17.08.2019


Ответы (2)


Изменить:

По-видимому, возврат каретки \r и возврат \b на самом деле не будут работать в режиме ожидания, потому что он использует текстовый элемент управления, который не отображает возврат/возврат должным образом.

Возможно, вы сможете написать какой-нибудь патч для Idle, но это может быть больше проблем, чем пользы (если вам действительно не нравится Idle).

person Wayne Werner    schedule 04.10.2013
comment
Когда я пытаюсь это сделать, я не вижу, чтобы предыдущий текст переопределялся. Мой результат: 0 замечательных цыплят! 1 замечательные цыплята! 2 замечательных цыпленка! 3 замечательных цыпленка! 4 замечательных цыпленка! 5 замечательных цыплят! 6 замечательных цыплят! 7 замечательных цыплят! 8 замечательных цыплят! 9 замечательных цыплят! - person Nanomurf; 04.10.2013
comment
Этот ответ кажется мне несколько саркастическим и даже бесполезным, несмотря на это. - person CmdrMoozy; 04.10.2013
comment
Совсем не сарказм - возможно, просто Idle не отображает возврат каретки должным образом, потому что это отлично работает в окне cmd в Windows. Также в интерактивном переводчике. Судя по комментарию @Nanomurf, кажется, что оболочка Idle на самом деле этого не сделает. - person Wayne Werner; 05.10.2013
comment
@CmdrMoozy - видимо, ошибся. Поскольку на самом деле я не удосужился открыть Idle (потому что я нахожу это странным) и попробовать свой код. Я предполагаю, что это связано с природой текстового элемента управления Tk, в котором находится код. - person Wayne Werner; 05.10.2013
comment
Я ценю обратную связь. Я не должен лениться в своем Python и придерживаться простых, удобных ограничений Idle... Спасибо за ваши 2 цента! - person Nanomurf; 05.10.2013
comment
Терминалы не согласны с тем, что означает рендеринг \b «правильно». В настоящее время IDLE выводит его как есть, и вы видите, что tcl/tk Text делает в вашей системе. Я рассматриваю возможность замены этого на что-то более последовательное и информативное и добавление режима терминала, который интерпретирует \b одним из двух возможных способов (перемещение курсора влево, а также удаление символа влево). - person Terry Jan Reedy; 17.08.2019

Это не отвечает на ваш вопрос в буквальном смысле, но я думаю, было бы полезно указать, что обычно интерфейсы, подобные тому, который вы описываете (например, где одна часть экрана постоянно обновляется, без новой строки), это просто обычно реализуется с использованием библиотеки, такой как ncurses.

Python имеет встроенную библиотеку curses (http://docs.python.org/3.3/library/curses.html), который может более или менее достичь вашей конечной цели.

person CmdrMoozy    schedule 04.10.2013
comment
Вы уверены, что библиотека curses будет работать в IDLE? И работают ли curses в MS Windows? - person Robᵩ; 06.12.2013
comment
В документации Python говорится, что версия Python для Windows не включает модуль curses. Доступна портированная версия под названием UniCurses, поэтому она должна работать. IDLE — это просто IDE, поэтому я не очень понимаю, какое это имеет отношение к функциональности интерпретатора. - person CmdrMoozy; 06.12.2013
comment
Curses ожидает, что его выходные данные будут переданы реальному «терминалу» или программе-эмулятору терминала, скорее всего, той, которая отвечает на VT100/ANSI. Оболочка IDLE (в настоящее время) не добавляет такой интерфейс в виджет tk/tkinter Text. - person Terry Jan Reedy; 17.08.2019