readline.md
1> **Источник:** https://python-all.ru/2.7/library/readline.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# 16.8. [`readline`](https://python-all.ru/2.7/library/readline.html#module-readline) – интерфейс GNU readline89Модуль [`readline`](https://python-all.ru/2.7/library/readline.html#module-readline) определяет ряд функций для упрощения автодополнения и чтения/записи файлов истории из интерпретатора Python. Этот модуль можно использовать напрямую или через модуль [`rlcompleter`](https://python-all.ru/2.7/library/rlcompleter.html#module-rlcompleter), который поддерживает автодополнение идентификаторов Python в интерактивной подсказке. Настройки, сделанные с помощью этого модуля, влияют на поведение как интерактивной подсказки интерпретатора, так и подсказок, предлагаемых встроенными функциями [`raw_input()`](https://python-all.ru/2.7/library/functions.html#raw_input) и [`input()`](https://python-all.ru/2.7/library/functions.html#input).1011> **Примечание**12>13> Базовый API библиотеки Readline может быть реализован библиотекой `libedit` вместо GNU readline. На MacOS X модуль [`readline`](https://python-all.ru/2.7/library/readline.html#module-readline) определяет, какая библиотека используется во время выполнения.14>15> Конфигурационный файл для `libedit` отличается от файла GNU readline. Если строки конфигурации загружаются программно, можно проверить наличие текста «libedit» в `readline.__doc__`, чтобы отличить GNU readline от libedit.1617Привязки клавиш Readline можно настроить через файл инициализации, обычно `.inputrc` в вашем домашнем каталоге. Смотрите [Файл инициализации Readline](https://python-all.ru/2.7/library/readline.html) в руководстве GNU Readline для получения информации о формате и допустимых конструкциях этого файла, а также о возможностях библиотеки Readline в целом.1819## 16.8.1. Файл инициализации2021Следующие функции относятся к файлу инициализации и пользовательской конфигурации:2223#### `readline.parse_and_bind(string)`2425Выполняет строку инициализации, переданную в аргументе *string*. Это вызывает `rl_parse_and_bind()` в базовой библиотеке.2627#### `readline.read_init_file([filename])`2829Выполняет файл инициализации readline. По умолчанию используется имя последнего использованного файла. Вызывает `rl_read_init_file()` в базовой библиотеке.3031## 16.8.2. Буфер строки3233Следующие функции работают с буфером строки:3435#### `readline.get_line_buffer()`3637Возвращает текущее содержимое буфера строки (`rl_line_buffer` в базовой библиотеке).3839#### `readline.insert_text(string)`4041Вставляет текст в буфер строки в позиции курсора. Это вызывает `rl_insert_text()` в базовой библиотеке, но игнорирует возвращаемое значение.4243#### `readline.redisplay()`4445Изменяет отображаемое на экране, чтобы отразить текущее содержимое буфера строки. Это вызывает `rl_redisplay()` в базовой библиотеке.4647## 16.8.3. Файл истории4849Следующие функции работают с файлом истории:5051#### `readline.read_history_file([filename])`5253Загружает файл истории readline и добавляет его в список истории. По умолчанию используется имя файла `~/.history`. Вызывает `read_history()` в базовой библиотеке.5455#### `readline.write_history_file([filename])`5657Сохраняет список истории в файл истории readline, перезаписывая любой существующий файл. По умолчанию используется имя файла `~/.history`. Вызывает `write_history()` в базовой библиотеке.5859#### `readline.get_history_length()`6061#### `readline.set_history_length(length)`6263Устанавливает или возвращает нужное количество строк для сохранения в файле истории. Функция [`write_history_file()`](https://python-all.ru/2.7/library/readline.html#readline.write_history_file) использует это значение для усечения файла истории, вызывая `history_truncate_file()` в нижележащей библиотеке. Отрицательные значения означают неограниченный размер файла истории.6465## 16.8.4. Список истории6667Следующие функции работают с глобальным списком истории:6869#### `readline.clear_history()`7071Очищает текущую историю. Вызывает `clear_history()` в нижележащей библиотеке. Функция Python существует только если Python был скомпилирован для версии библиотеки, которая её поддерживает.7273Новое в версии 2.4.7475#### `readline.get_current_history_length()`7677Возвращает количество элементов, находящихся в истории. (Отличается от [`get_history_length()`](https://python-all.ru/2.7/library/readline.html#readline.get_history_length), которая возвращает максимальное количество строк, которое будет записано в файл истории.)7879Новое в версии 2.3.8081#### `readline.get_history_item(index)`8283Возвращает текущее содержимое элемента истории по *index*. Индекс элемента начинается с 1. Вызывает `history_get()` в нижележащей библиотеке.8485Новое в версии 2.3.8687#### `readline.remove_history_item(pos)`8889Удаляет элемент истории, заданный по его позиции, из истории. Позиция начинается с 0. Вызывает `remove_history()` в нижележащей библиотеке.9091Новое в версии 2.4.9293#### `readline.replace_history_item(pos, line)`9495Заменяет элемент истории, заданный по его позиции, на *line*. Позиция начинается с 0. Вызывает `replace_history_entry()` в нижележащей библиотеке.9697Новое в версии 2.4.9899#### `readline.add_history(line)`100101Добавляет *line* в буфер истории, как если бы это была последняя введённая строка. Вызывает `add_history()` в нижележащей библиотеке.102103## 16.8.5. Стартовые хуки104105> Новое в версии 2.3.106107#### `readline.set_startup_hook([function])`108109Устанавливает или удаляет функцию, вызываемую колбэком `rl_startup_hook` нижележащей библиотеки. Если указан *function*, он будет использоваться как новая функция-хук; если опущен или `None`, любая ранее установленная функция удаляется. Хук вызывается без аргументов непосредственно перед тем, как readline выведет первое приглашение.110111#### `readline.set_pre_input_hook([function])`112113Устанавливает или удаляет функцию, вызываемую колбэком `rl_pre_input_hook` нижележащей библиотеки. Если указан *function*, он будет использоваться как новая функция-хук; если опущен или `None`, любая ранее установленная функция удаляется. Хук вызывается без аргументов после вывода первого приглашения и непосредственно перед тем, как readline начнёт читать вводимые символы. Эта функция существует только если Python был скомпилирован для версии библиотеки, которая его поддерживает.114115## 16.8.6. Автодополнение116117Следующие функции относятся к реализации пользовательской функции завершения слов. Обычно она вызывается клавишей Tab и может предлагать и автоматически завершать вводимое слово. По умолчанию Readline настроен для использования [`rlcompleter`](https://python-all.ru/2.7/library/rlcompleter.html#module-rlcompleter) для завершения идентификаторов Python в интерактивном интерпретаторе. Если модуль [`readline`](https://python-all.ru/2.7/library/readline.html#module-readline) должен использоваться с пользовательским комплитером, следует задать другой набор разделителей слов.118119#### `readline.set_completer([function])`120121Установить или удалить функцию дополнения. Если указана *function*, она будет использоваться как новая функция дополнения; если опущена или `None`, любая установленная ранее функция дополнения удаляется. Функция дополнения вызывается как `function(text, state)` для *state* в `0`, `1`, `2`, … пока не вернет нестроковое значение. Она должна возвращать следующее возможное дополнение, начинающееся с *text*.122123Установленная функция дополнения вызывается колбэком *entry\_func*, переданным в `rl_completion_matches()` в нижележащей библиотеке. Строка *text* берется из первого параметра колбэка `rl_attempted_completion_function` нижележащей библиотеки.124125#### `readline.get_completer()`126127Возвращает функцию дополнения или `None`, если функция дополнения не была установлена.128129Новое в версии 2.3.130131#### `readline.get_completion_type()`132133Возвращает тип выполняемого дополнения. Возвращает переменную `rl_completion_type` из нижележащей библиотеки в виде целого числа.134135Новое в версии 2.6.136137#### `readline.get_begidx()`138139#### `readline.get_endidx()`140141Получить начальный или конечный индекс области завершения. Эти индексы – аргументы *start* и *end*, передаваемые в колбэк `rl_attempted_completion_function` нижележащей библиотеки.142143#### `readline.set_completer_delims(string)`144145#### `readline.get_completer_delims()`146147Устанавливает или возвращает разделители слов для дополнения. Они определяют начало слова, для которого рассматривается дополнение (область дополнения). Эти функции обращаются к переменной `rl_completer_word_break_characters` в нижележащей библиотеке.148149#### `readline.set_completion_display_matches_hook([function])`150151Устанавливает или удаляет функцию отображения дополнений. Если указана *function*, она будет использоваться как новая функция отображения дополнений; если опущена или `None`, любая установленная ранее функция отображения дополнений удаляется. Эта функция устанавливает или очищает колбэк `rl_completion_display_matches_hook` в нижележащей библиотеке. Функция отображения дополнений вызывается как `function(substitution, [matches], longest_match_length)` каждый раз, когда нужно отобразить совпадения.152153Новое в версии 2.6.154155## 16.8.7. Пример156157Следующий пример демонстрирует, как использовать функции чтения и записи истории модуля [`readline`](https://python-all.ru/2.7/library/readline.html#module-readline) для автоматической загрузки и сохранения файла истории с именем `.pyhist` из домашнего каталога пользователя. Приведённый ниже код обычно выполняется автоматически во время интерактивных сеансов из [`PYTHONSTARTUP`](https://python-all.ru/2.7/using/cmdline.html#envvar-PYTHONSTARTUP) файла пользователя.158159```python160import os161import readline162histfile = os.path.join(os.path.expanduser("~"), ".pyhist")163try:164 readline.read_history_file(histfile)165 # длина истории по умолчанию равна -1 (бесконечность), что может привести к неконтролируемому росту166 readline.set_history_length(1000)167except IOError:168 pass169import atexit170atexit.register(readline.write_history_file, histfile)171del os, histfile172```173174Следующий пример расширяет класс [`code.InteractiveConsole`](https://python-all.ru/2.7/library/code.html#code.InteractiveConsole) для поддержки сохранения и восстановления истории.175176```python177import code178import readline179import atexit180import os181182class HistoryConsole(code.InteractiveConsole):183 def __init__(self, locals=None, filename="<console>",184 histfile=os.path.expanduser("~/.console-history")):185 code.InteractiveConsole.__init__(self, locals, filename)186 self.init_history(histfile)187188 def init_history(self, histfile):189 readline.parse_and_bind("tab: complete")190 if hasattr(readline, "read_history_file"):191 try:192 readline.read_history_file(histfile)193 except IOError:194 pass195 atexit.register(self.save_history, histfile)196197 def save_history(self, histfile):198 readline.set_history_length(1000)199 readline.write_history_file(histfile)200```201