readline — GNU readline интерфейс
Модуль readline определяет ряд функций для облегчения автодополнения и чтения/записи файлов истории из интерпретатора Python. Этот модуль может быть использован напрямую или через модуль rlcompleter, который поддерживает автодополнение идентификаторов Python в интерактивном режиме. Настройки, сделанные с помощью этого модуля, влияют на поведение как интерактивного приглашения интерпретатора, так и приглашений, предлагаемых встроенной функцией input().
Настройки сочетаний клавиш readline могут быть сконфигурированы через файл инициализации, обычно .inputrc в вашем домашнем каталоге. См. Файл инициализации Readline в руководстве GNU Readline для получения информации о формате и допустимых конструкциях этого файла, а также о возможностях библиотеки Readline в целом.
Доступность: не Android, не iOS, не WASI.
Этот модуль не поддерживается на мобильных платформах или платформах WebAssembly.
Примечание
Базовый API библиотеки Readline может быть реализован библиотекой editline (libedit) вместо GNU readline. В macOS модуль readline определяет используемую библиотеку во время выполнения.
Файл конфигурации для editline отличается от файла GNU readline. Если вы программно загружаете строки конфигурации, вы можете использовать backend для определения используемой библиотеки.
Если вы используете editline/libedit эмуляцию readline в macOS, файл инициализации, расположенный в вашем домашнем каталоге, называется .editrc. Например, следующее содержимое в ~/.editrc включит vi сочетания клавиш и автодополнение TAB:
python:bind -v python:bind ^I rl_complete
Также обратите внимание, что разные библиотеки могут использовать разные форматы файлов истории. При переключении базовой библиотеки существующие файлы истории могут стать непригодными для использования.
-
readline.backend -
Имя используемой базовой библиотеки Readline, либо
"readline"или"editline".Добавлена в версии 3.13.
Файл инициализации
Следующие функции относятся к файлу инициализации и пользовательской конфигурации:
-
readline.parse_and_bind(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]) -
Добавляет последние неlements элементов истории в файл. Имя файла по умолчанию —
~/.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. Индекс элемента — основано на 1.
-
readline.remove_history_item(pos) -
Удаляет элемент истории, заданный его позицией из истории. Позиция основана на 0. Это вызов
remove_history()в базовой библиотеке.
-
readline.replace_history_item(pos, line) -
Заменяет элемент истории, заданный его позицией на строку. Позиция основана на 0. Это вызов
replace_history_entry()в базовой библиотеке.
-
readline.add_history(line) -
Добавляет строку в буфер истории, как если бы это была последняя набранная строка. Это вызов
add_history()в базовой библиотеке.
-
readline.set_auto_history(enabled) -
Включает или выключает автоматические вызовы
add_history()при чтении ввода с помощью readline. Аргумент enabled должен быть логическим значением, которое, если он равен true, включает автоматическую историю, а если равен false, отключает её.Добавлена в версии 3.6.
Подробность реализации CPython: Автоматическая история включена по умолчанию, и изменения в ней не сохраняются между сессиями.
Запускаемые хуки
-
readline.set_startup_hook([function]) -
Установить или удалить функцию, вызываемую callback
rl_startup_hookбазовой библиотеки. Если функция указана, она будет использоваться в качестве новой функции хука; если опущенна илиNone, любая ранее установленная функция будет удалена. Хук вызывается без аргументов непосредственно перед тем, как readline отобразит первое приглашение.
-
readline.set_pre_input_hook([function]) -
Установить или удалить функцию, вызываемую callback
rl_pre_input_hookбазовой библиотеки. Если функция указана, она будет использоваться в качестве новой функции хука; если опущенна или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базовой библиотеки. Значения могут отличаться в одном и том же сценарии редактирования ввода в зависимости от реализации C readline в базовой библиотеке. Пример: 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–2024 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.13/library/readline.html