Документация Python неофициальный перевод

interactive.md

112 строк · 11.1 КБ · обычная страница · сырой текст · скачать

1> **Источник:** https://python-all.ru/2.7/tutorial/interactive.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# 13. Интерактивное редактирование ввода и подстановка истории89Некоторые версии интерпретатора Python поддерживают редактирование текущей строки ввода и подстановку из истории, аналогично тому, что есть в оболочках Korn и GNU Bash. Это реализовано с помощью библиотеки [GNU Readline](https://python-all.ru/2.7/tutorial/interactive.html), которая поддерживает редактирование в стиле Emacs и vi. У этой библиотеки есть собственная документация, которую я здесь не буду повторять; однако основные принципы легко объяснить. Описанные здесь интерактивное редактирование и подстановка из истории опционально доступны в версиях интерпретатора для Unix и Cygwin.1011В этой главе *не* описываются средства редактирования пакета PythonWin Марка Хаммонда или среды IDLE на основе Tk, распространяемой вместе с Python. Вызов истории командной строки, работающий в окнах DOS на NT и некоторых других версиях DOS и Windows, – это совсем другое дело.1213## 13.1. Редактирование строки1415Если поддерживается, редактирование строки ввода активно при выводе основного или дополнительного приглашения интерпретатора. Текущую строку можно редактировать с помощью стандартных управляющих символов Emacs. Наиболее важные из них: `C-A` (Control-A) перемещает курсор в начало строки, `C-E` – в конец, `C-B` перемещает на одну позицию влево, `C-F` – вправо. Backspace удаляет символ слева от курсора, `C-D` – справа от него. `C-K` удаляет часть строки справа от курсора, `C-Y` вставляет последнюю удалённую строку. `C-underscore` отменяет последнее изменение; можно повторять для накопления эффекта.1617## 13.2. Подстановка истории1819Подстановка истории работает следующим образом. Все непустые введённые строки сохраняются в буфере истории, и при появлении нового приглашения пользователь оказывается на новой строке внизу этого буфера. `C-P` перемещает на одну строку вверх (назад) в буфере истории, `C-N` – на одну вниз. Любую строку в буфере истории можно редактировать; звёздочка появляется перед приглашением, чтобы отметить строку как изменённую. Нажатие клавиши `Return` передаёт текущую строку интерпретатору. `C-R` запускает инкрементальный обратный поиск; `C-S` запускает прямой поиск.2021## 13.3. Привязки клавиш2223Привязки клавиш и некоторые другие параметры библиотеки Readline можно настроить, поместив команды в файл инициализации с именем `~/.inputrc`. Привязки клавиш имеют вид2425```python26key-name: function-name27```2829или3031```python32"string": function-name33```3435а параметры можно задать с помощью3637```python38set option-name value39```4041Например:4243```python44# Я предпочитаю редактирование в стиле vi:45set editing-mode vi4647# Редактирование одной строкой:48set horizontal-scroll-mode On4950# Переназначить некоторые клавиши:51Meta-h: backward-kill-word52"\C-u": universal-argument53"\C-x\C-r": re-read-init-file54```5556Обратите внимание, что привязка по умолчанию для `Tab` в Python – вставка символа `Tab`, а не функция завершения имён файлов Readline. Если необходимо, это можно переопределить, поместив5758```python59Tab: complete60```6162в ваш `~/.inputrc`. (Конечно, это усложняет ввод строк продолжения с отступом, если вы привыкли использовать для этого `Tab`.)6364Автоматическое дополнение имён переменных и модулей опционально доступно. Чтобы включить его в интерактивном режиме интерпретатора, добавьте следующее в ваш файл запуска: [1](https://python-all.ru/2.7/tutorial/interactive.html#id2)6566```python67import rlcompleter, readline68readline.parse_and_bind('tab: complete')69```7071Это привязывает клавишу `Tab` к функции завершения, так что двукратное нажатие `Tab` предлагает варианты завершения; она просматривает имена операторов Python, текущие локальные переменные и доступные имена модулей. Для выражений с точками, таких как `string.a`, она вычисляет выражение до последней `'.'`, а затем предлагает завершения из атрибутов результирующего объекта. Обратите внимание, что это может выполнять определённый приложением код, если в выражении участвует объект с методом [`__getattr__()`](https://python-all.ru/2.7/reference/datamodel.html#object.__getattr__).7273Более функциональный файл запуска может выглядеть как этот пример. Обратите внимание, что он удаляет созданные имена, как только они становятся не нужны; это сделано потому, что файл запуска выполняется в том же пространстве имён, что и интерактивные команды, и удаление имён позволяет избежать побочных эффектов в интерактивной среде. Возможно, вам будет удобно сохранить некоторые импортированные модули, например [`os`](https://python-all.ru/2.7/library/os.html#module-os), которые, как оказывается, нужны в большинстве сеансов работы с интерпретатором.7475```python76# Добавить автодополнение и сохранение истории команд в ваш Python77# интерактивный интерпретатор. Требуется Python 2.0+ и readline. Автодополнение78# привязано к клавише Esc по умолчанию (можно изменить – см. документацию readline).79#80# Сохраните файл в ~/.pystartup и установите переменную окружения, указывающую на81# для этого:  "export PYTHONSTARTUP=~/.pystartup" в bash.8283import atexit84import os85import readline86import rlcompleter8788historyPath = os.path.expanduser("~/.pyhistory")8990def save_history(historyPath=historyPath):91    import readline92    readline.write_history_file(historyPath)9394if os.path.exists(historyPath):95    readline.read_history_file(historyPath)9697atexit.register(save_history)98del os, atexit, readline, rlcompleter, save_history, historyPath99```100101## 13.4. Альтернативы интерактивному интерпретатору102103Эта возможность является огромным шагом вперед по сравнению с более ранними версиями интерпретатора; однако остаются некоторые пожелания: было бы хорошо, если бы правильный отступ предлагался на строках продолжения (парсер знает, требуется ли следующий токен отступа). Механизм автодополнения мог бы использовать таблицу символов интерпретатора. Также была бы полезна команда для проверки (или даже предложения) соответствующих скобок, кавычек и т.д.104105Одной из альтернатив с расширенными возможностями, которая существует уже довольно давно, является [IPython](https://python-all.ru/2.7/tutorial/interactive.html). Он предлагает автодополнение по табуляции, исследование объектов и расширенное управление историей. Его также можно тщательно настраивать и встраивать в другие приложения. Другая подобная среда с расширенными возможностями – [bpython](https://python-all.ru/2.7/tutorial/interactive.html).106107Сноски108109**[1](https://python-all.ru/2.7/tutorial/interactive.html#id1)**110111Python выполнит содержимое файла, указанного переменной окружения [`PYTHONSTARTUP`](https://python-all.ru/2.7/using/cmdline.html#envvar-PYTHONSTARTUP), при запуске интерактивного интерпретатора. Чтобы настроить Python даже для неинтерактивного режима, см. [Модули настройки](https://python-all.ru/2.7/tutorial/appendix.html#tut-customize).112