readline.md
1> **Источник:** https://python-all.ru/3.3/library/readline.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# 6.7. [`readline`](https://python-all.ru/3.3/library/readline.html#module-readline) – интерфейс GNU readline89Модуль [`readline`](https://python-all.ru/3.3/library/readline.html#module-readline) определяет несколько функций для автоматического дополнения и чтения/записи файлов истории из интерпретатора Python. Этот модуль можно использовать напрямую или через модуль [`rlcompleter`](https://python-all.ru/3.3/library/rlcompleter.html#module-rlcompleter). Настройки, сделанные с помощью этого модуля, влияют на поведение как интерактивной подсказки интерпретатора, так и подсказок, предоставляемых встроенной функцией [`input()`](https://python-all.ru/3.3/library/functions.html#input).1011> **Примечание**12>13> В MacOS X модуль [`readline`](https://python-all.ru/3.3/library/readline.html#module-readline) может быть реализован с использованием библиотеки `libedit` вместо GNU readline.14>15> Файл конфигурации для `libedit` отличается от файла GNU readline. Если программно загружать строки конфигурации, можно проверить наличие текста «libedit» в `readline.__doc__`, чтобы отличить GNU readline от libedit.1617Модуль [`readline`](https://python-all.ru/3.3/library/readline.html#module-readline) определяет следующие функции:1819#### `readline.parse_and_bind(string)`2021Разбирает и выполняет одну строку из файла инициализации readline.2223#### `readline.get_line_buffer()`2425Возвращает текущее содержимое буфера строки.2627#### `readline.insert_text(string)`2829Вставляет текст в командную строку.3031#### `readline.read_init_file([filename])`3233Разбирает файл инициализации readline. По умолчанию используется последнее имя файла.3435#### `readline.read_history_file([filename])`3637Загружает файл истории readline. По умолчанию используется имя файла `~/.history`.3839#### `readline.write_history_file([filename])`4041Сохраняет файл истории readline. По умолчанию используется имя файла `~/.history`.4243#### `readline.clear_history()`4445Очищает текущую историю. (Примечание: эта функция недоступна, если установленная версия GNU readline её не поддерживает.)4647#### `readline.get_history_length()`4849Возвращает желаемый размер файла истории. Отрицательные значения означают неограниченный размер.5051#### `readline.set_history_length(length)`5253Устанавливает количество строк для сохранения в файле истории. [`write_history_file()`](https://python-all.ru/3.3/library/readline.html#readline.write_history_file) использует это значение для усечения файла истории при сохранении. Отрицательные значения означают неограниченный размер.5455#### `readline.get_current_history_length()`5657Возвращает количество строк, находящихся в данный момент в истории. (Это отличается от [`get_history_length()`](https://python-all.ru/3.3/library/readline.html#readline.get_history_length), который возвращает максимальное количество строк, которое будет записано в файл истории.)5859#### `readline.get_history_item(index)`6061Возвращает текущее содержимое элемента истории с индексом *index*.6263#### `readline.remove_history_item(pos)`6465Удаляет элемент истории, указанный его позицией, из истории.6667#### `readline.replace_history_item(pos, line)`6869Заменяет элемент истории, указанный его позицией, на заданную строку.7071#### `readline.redisplay()`7273Изменяет отображаемое на экране, чтобы оно соответствовало текущему содержимому буфера строки.7475#### `readline.set_startup_hook([function])`7677Устанавливает или удаляет функцию startup\_hook. Если указан *function*, она будет использоваться как новая функция startup\_hook; если он опущен или равен `None`, любая уже установленная функция-перехватчик удаляется. Функция startup\_hook вызывается без аргументов непосредственно перед тем, как readline выводит первое приглашение.7879#### `readline.set_pre_input_hook([function])`8081Устанавливает или удаляет функцию pre\_input\_hook. Если указан *function*, она будет использоваться как новая функция pre\_input\_hook; если он опущен или равен `None`, любая уже установленная функция-перехватчик удаляется. Функция pre\_input\_hook вызывается без аргументов после вывода первого приглашения и непосредственно перед тем, как readline начинает чтение вводимых символов.8283#### `readline.set_completer([function])`8485Устанавливает или удаляет функцию завершения (completer). Если указан *function*, она будет использоваться как новая функция завершения; если он опущен или равен `None`, любая уже установленная функция завершения удаляется. Функция завершения вызывается в виде `function(text, state)`, для *state* в `0`, `1`, `2`, ..., пока она не вернёт значение, не являющееся строкой. Она должна возвращать следующее возможное завершение, начинающееся с *text*.8687#### `readline.get_completer()`8889Возвращает функцию завершения или `None`, если функция завершения не была установлена.9091#### `readline.get_completion_type()`9293Возвращает тип выполняемого завершения.9495#### `readline.get_begidx()`9697Возвращает начальный индекс области автодополнения readline.9899#### `readline.get_endidx()`100101Возвращает конечный индекс области автодополнения readline.102103#### `readline.set_completer_delims(string)`104105Устанавливает разделители слов readline для автодополнения.106107#### `readline.get_completer_delims()`108109Возвращает разделители слов readline для автодополнения.110111#### `readline.set_completion_display_matches_hook([function])`112113Устанавливает или удаляет функцию отображения завершений. Если указан *function*, она будет использоваться как новая функция отображения завершений; если он опущен или равен `None`, любая уже установленная функция отображения завершений удаляется. Функция отображения завершений вызывается в виде `function(substitution, [matches], longest_match_length)` каждый раз, когда необходимо отобразить совпадения.114115#### `readline.add_history(line)`116117Добавляет строку в буфер истории, как если бы это была последняя введённая строка.118119> **См. также**120>121> **Модуль [`rlcompleter`](https://python-all.ru/3.3/library/rlcompleter.html#module-rlcompleter)**122>123> Завершение идентификаторов Python в интерактивном приглашении.124125## 6.7.1. Пример126127Следующий пример демонстрирует, как использовать функции чтения и записи истории модуля [`readline`](https://python-all.ru/3.3/library/readline.html#module-readline) для автоматической загрузки и сохранения файла истории с именем `.pyhist` из домашнего каталога пользователя. Код ниже обычно выполняется автоматически во время интерактивных сеансов из файла [`PYTHONSTARTUP`](https://python-all.ru/3.3/using/cmdline.html#envvar-PYTHONSTARTUP).128129```python130import os131import readline132histfile = os.path.join(os.path.expanduser("~"), ".pyhist")133try:134 readline.read_history_file(histfile)135except FileNotFoundError:136 pass137import atexit138atexit.register(readline.write_history_file, histfile)139del os, histfile140```141142Следующий пример расширяет класс [`code.InteractiveConsole`](https://python-all.ru/3.3/library/code.html#code.InteractiveConsole) для поддержки сохранения и восстановления истории.143144```python145import code146import readline147import atexit148import os149150class HistoryConsole(code.InteractiveConsole):151 def __init__(self, locals=None, filename="<console>",152 histfile=os.path.expanduser("~/.console-history")):153 code.InteractiveConsole.__init__(self, locals, filename)154 self.init_history(histfile)155156 def init_history(self, histfile):157 readline.parse_and_bind("tab: complete")158 if hasattr(readline, "read_history_file"):159 try:160 readline.read_history_file(histfile)161 except FileNotFoundError:162 pass163 atexit.register(self.save_history, histfile)164165 def save_history(self, histfile):166 readline.write_history_file(histfile)167```168