readline — интерфейс GNU readline
Модуль readline определяет ряд функций для упрощения автодополнения и чтения/записи файлов истории из интерпретатора Python. Этот модуль можно использовать напрямую или через модуль rlcompleter, который поддерживает автодополнение идентификаторов Python в интерактивной командной строке. Настройки, заданные с помощью этого модуля, влияют как на интерактивную командную строку интерпретатора, так и на приглашения, отображаемые встроенной функцией input().
Сочетания клавиш Readline можно настроить с помощью файла инициализации, обычно .inputrc в домашнем каталоге. Сведения о формате и допустимых конструкциях этого файла, а также о возможностях библиотеки Readline в целом см. в разделе Файл инициализации Readline руководства GNU Readline.
Доступность: не поддерживается на Android, iOS и WASI.
Этот модуль не поддерживается на мобильных платформах и платформах WebAssembly.
Примечание
API нижележащей библиотеки Readline может быть реализован библиотекой editline (libedit) вместо GNU readline. В macOS модуль readline во время выполнения определяет, какая библиотека используется.
Файл конфигурации для editline отличается от файла конфигурации GNU readline. Если вы загружаете строки конфигурации программно, можно использовать backend, чтобы определить, какая библиотека используется.
Если в macOS вы используете эмуляцию readline editline/libedit, файл инициализации в домашнем каталоге называется .editrc. Например, следующее содержимое файла ~/.editrc включает сочетания клавиш vi и автодополнение по TAB:
python:bind -v python:bind ^I rl_complete
Также обратите внимание, что разные библиотеки могут использовать разные форматы файлов истории. При смене нижележащей библиотеки существующие файлы истории могут стать непригодными для использования.
-
readline.backend -
Имя используемой нижележащей библиотеки Readline:
"readline"или"editline".Добавлено в версии 3.13.
Файл инициализации
Следующие функции относятся к файлу инициализации и пользовательской конфигурации:
-
readline.parse_and_bind(string) -
Выполняет строку инициализации, переданную в аргументе string. Вызывает
rl_parse_and_bind()в нижележащей библиотеке.
-
readline.read_init_file([filename]) -
Выполняет файл инициализации readline. По умолчанию используется имя последнего использованного файла. Вызывает
rl_read_init_file()в нижележащей библиотеке.
Буфер строки
Следующие функции работают с буфером строки:
-
readline.get_line_buffer() -
Возвращает текущее содержимое буфера строки (
rl_line_bufferв нижележащей библиотеке).
-
readline.insert_text(string) -
Вставляет текст в буфер строки в позицию курсора. Вызывает
rl_insert_text()в нижележащей библиотеке, но игнорирует возвращаемое значение.
-
readline.redisplay() -
Обновляет отображение на экране в соответствии с текущим содержимым буфера строки. Вызывает
rl_redisplay()в нижележащей библиотеке.
Файл истории
Следующие функции работают с файлом истории:
-
readline.read_history_file([filename]) -
Загружает файл истории readline и добавляет его содержимое в список истории. По умолчанию используется имя файла
~/.history. Вызываетread_history()в нижележащей библиотеке.
-
readline.write_history_file([filename]) -
Сохраняет список истории в файл истории readline, перезаписывая существующий файл. По умолчанию используется имя файла
~/.history. Вызываетwrite_history()в нижележащей библиотеке.
-
readline.append_history_file(nelements[, filename]) -
Добавляет в файл последние nelements элементов истории. По умолчанию используется имя файла
~/.history. Файл должен уже существовать. Вызываетappend_history()в нижележащей библиотеке. Эта функция доступна только в том случае, если Python был скомпилирован для версии библиотеки, которая её поддерживает.Добавлено в версии 3.5.
-
readline.get_history_length() -
readline.set_history_length(length) -
Задаёт или возвращает требуемое количество строк для сохранения в файле истории. Функция
write_history_file()использует это значение для усечения файла истории, вызываяhistory_truncate_file()в нижележащей библиотеке. Отрицательные значения означают неограниченный размер файла истории.
Список истории
Следующие функции работают с глобальным списком истории:
-
readline.clear_history() -
Очищает текущую историю. Вызывает
clear_history()в нижележащей библиотеке. Функция Python доступна только в том случае, если Python был скомпилирован для версии библиотеки, которая её поддерживает.
-
readline.get_current_history_length() -
Возвращает количество элементов в текущей истории. (Это значение отличается от результата функции
get_history_length(), которая возвращает максимальное количество строк, записываемых в файл истории.)
-
readline.get_history_item(index) -
Возвращает текущее содержимое элемента истории с индексом index. Индексация элементов начинается с единицы. Вызывает
history_get()в нижележащей библиотеке.
-
readline.remove_history_item(pos) -
Удаляет из истории элемент, указанный его позицией. Нумерация позиций начинается с нуля. Вызывает
remove_history()в нижележащей библиотеке.
-
readline.replace_history_item(pos, line) -
Заменяет элемент истории, указанный его позицией, на line. Нумерация позиций начинается с нуля. Вызывает
replace_history_entry()в нижележащей библиотеке.
-
readline.add_history(line) -
Добавляет line в буфер истории, как если бы это была последняя введённая строка. Вызывает
add_history()в нижележащей библиотеке.
-
readline.set_auto_history(enabled) -
Включает или отключает автоматические вызовы
add_history()при чтении ввода с помощью readline. Аргумент enabled должен иметь логическое значение: значение true включает автоматическое добавление в историю, а значение false отключает его.Добавлено в версии 3.6.
Особенность реализации CPython: Автоматическое добавление в историю включено по умолчанию; изменения этой настройки не сохраняются между сеансами.
Обработчики запуска
-
readline.set_startup_hook([function]) -
Задаёт или удаляет функцию, вызываемую обратным вызовом
rl_startup_hookнижележащей библиотеки. Если указан аргумент function, он будет использоваться как новая функция-обработчик; если аргумент опущен или равенNone, ранее установленная функция удаляется. Обработчик вызывается без аргументов непосредственно перед тем, как readline выводит первое приглашение.
-
readline.set_pre_input_hook([function]) -
Задаёт или удаляет функцию, вызываемую обратным вызовом
rl_pre_input_hookнижележащей библиотеки. Если указан аргумент function, он будет использоваться как новая функция-обработчик; если аргумент опущен или равенNone, ранее установленная функция удаляется. Обработчик вызывается без аргументов после вывода первого приглашения и непосредственно перед тем, как readline начинает считывать вводимые символы. Эта функция доступна только в том случае, если Python был скомпилирован для версии библиотеки, которая её поддерживает.
Автодополнение
Следующие функции относятся к реализации пользовательской функции автодополнения слов. Обычно она вызывается клавишей Tab и может предлагать варианты и автоматически дополнять вводимое слово. По умолчанию Readline настроен на использование модуля rlcompleter для автодополнения идентификаторов Python в интерактивном интерпретаторе. Если модуль readline используется с пользовательской функцией автодополнения, следует задать другой набор разделителей слов.
-
readline.set_completer([function]) -
Задаёт или удаляет функцию автодополнения. Если указан аргумент function, он будет использоваться как новая функция автодополнения; если аргумент опущен или равен
None, ранее установленная функция автодополнения удаляется. Функция автодополнения вызывается какfunction(text, state)для state в0,1,2, …, пока она не вернёт значение, не являющееся строкой. Она должна возвращать следующий возможный вариант автодополнения, начинающийся с text.Установленная функция автодополнения вызывается обратным вызовом entry_func, переданным в
rl_completion_matches()нижележащей библиотеки. Строка text берётся из первого параметра обратного вызоваrl_attempted_completion_functionнижележащей библиотеки.
-
readline.get_completer() -
Возвращает функцию автодополнения или
None, если функция автодополнения не задана.
-
readline.get_completion_type() -
Возвращает тип выполняемого автодополнения. Возвращает значение переменной
rl_completion_typeнижележащей библиотеки в виде целого числа.
-
readline.get_begidx() -
readline.get_endidx() -
Возвращает начальный или конечный индекс области автодополнения. Эти индексы соответствуют аргументам start и end, передаваемым обратному вызову
rl_attempted_completion_functionнижележащей библиотеки. В одном и том же сценарии редактирования ввода значения могут различаться в зависимости от используемой реализации readline на C. Например, известно, что libedit ведёт себя иначе, чем libreadline.
-
readline.set_completer_delims(string) -
readline.get_completer_delims() -
Задаёт или возвращает разделители слов для автодополнения. Они определяют начало слова, которое следует дополнять (область автодополнения). Эти функции обращаются к переменной
rl_completer_word_break_charactersнижележащей библиотеки.
-
readline.set_completion_display_matches_hook([function]) -
Задаёт или удаляет функцию отображения вариантов автодополнения. Если указан аргумент function, он будет использоваться как новая функция отображения вариантов; если аргумент опущен или равен
None, ранее установленная функция отображения вариантов удаляется. Эта функция устанавливает или очищает обратный вызовrl_completion_display_matches_hookнижележащей библиотеки. Функция отображения вариантов автодополнения вызывается какfunction(substitution, [matches], longest_match_length)каждый раз, когда требуется показать варианты.
Пример
В следующем примере показано, как использовать функции чтения и записи истории модуля readline для автоматической загрузки и сохранения файла истории с именем .python_history из домашнего каталога пользователя. Приведённый ниже код обычно автоматически выполняется во время интерактивных сеансов из файла PYTHONSTARTUP пользователя.
import atexit
import os
import readline
histfile = os.path.join(os.path.expanduser("~"), ".python_history")
try:
readline.read_history_file(histfile)
# default history len is -1 (infinite), which may grow unruly
readline.set_history_length(1000)
except FileNotFoundError:
pass
atexit.register(readline.write_history_file, histfile)
Этот код фактически выполняется автоматически при запуске Python в интерактивном режиме (см. раздел Настройка Readline).
Следующий пример достигает той же цели, но поддерживает параллельные интерактивные сеансы, добавляя только новые записи истории.
import atexit
import os
import readline
histfile = os.path.join(os.path.expanduser("~"), ".python_history")
try:
readline.read_history_file(histfile)
h_len = readline.get_current_history_length()
except FileNotFoundError:
open(histfile, 'wb').close()
h_len = 0
def save(prev_h_len, histfile):
new_h_len = readline.get_current_history_length()
readline.set_history_length(1000)
readline.append_history_file(new_h_len - prev_h_len, histfile)
atexit.register(save, h_len, histfile)
Следующий пример расширяет класс code.InteractiveConsole, добавляя поддержку сохранения и восстановления истории.
import atexit
import code
import os
import readline
class HistoryConsole(code.InteractiveConsole):
def __init__(self, locals=None, filename="<console>",
histfile=os.path.expanduser("~/.console-history")):
code.InteractiveConsole.__init__(self, locals, filename)
self.init_history(histfile)
def init_history(self, histfile):
readline.parse_and_bind("tab: complete")
if hasattr(readline, "read_history_file"):
try:
readline.read_history_file(histfile)
except FileNotFoundError:
pass
atexit.register(self.save_history, histfile)
def save_history(self, histfile):
readline.set_history_length(1000)
readline.write_history_file(histfile)
© 2001–2025 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.13/library/readline.html