Содержание страницы
6.7. readline – интерфейс GNU readline¶readline – GNU readline interface
Модуль readline определяет несколько функций для автоматического дополнения и чтения/записи файлов истории из интерпретатора Python. Этот модуль можно использовать напрямую или через модуль rlcompleter. Настройки, сделанные с помощью этого модуля, влияют на поведение как интерактивной подсказки интерпретатора, так и подсказок, предоставляемых встроенной функцией input().
Примечание
В MacOS X модуль readline может быть реализован с использованием библиотеки libedit вместо GNU readline.
Файл конфигурации для libedit отличается от файла GNU readline. Если программно загружать строки конфигурации, можно проверить наличие текста «libedit» в readline.__doc__, чтобы отличить GNU readline от libedit.
Модуль readline определяет следующие функции:
- readline.parse_and_bind(string)¶
Разбирает и выполняет одну строку из файла инициализации readline.
- readline.get_line_buffer()¶
Возвращает текущее содержимое буфера строки.
- readline.insert_text(string)¶
Вставляет текст в командную строку.
- readline.read_init_file([filename])¶
Разбирает файл инициализации readline. По умолчанию используется последнее имя файла.
- readline.read_history_file([filename])¶
Загружает файл истории readline. По умолчанию используется имя файла ~/.history.
- readline.write_history_file([filename])¶
Сохраняет файл истории readline. По умолчанию используется имя файла ~/.history.
- readline.clear_history()¶
Очищает текущую историю. (Примечание: эта функция недоступна, если установленная версия GNU readline её не поддерживает.)
- readline.get_history_length()¶
Возвращает желаемый размер файла истории. Отрицательные значения означают неограниченный размер.
- readline.set_history_length(length)¶
Устанавливает количество строк для сохранения в файле истории. write_history_file() использует это значение для усечения файла истории при сохранении. Отрицательные значения означают неограниченный размер.
- readline.get_current_history_length()¶
Возвращает количество строк, находящихся в данный момент в истории. (Это отличается от get_history_length(), который возвращает максимальное количество строк, которое будет записано в файл истории.)
- readline.get_history_item(index)¶
Возвращает текущее содержимое элемента истории с индексом index.
- readline.remove_history_item(pos)¶
Удаляет элемент истории, указанный его позицией, из истории.
- readline.replace_history_item(pos, line)¶
Заменяет элемент истории, указанный его позицией, на заданную строку.
- readline.redisplay()¶
Изменяет отображаемое на экране, чтобы оно соответствовало текущему содержимому буфера строки.
- readline.set_startup_hook([function])¶
Устанавливает или удаляет функцию startup_hook. Если указан function, она будет использоваться как новая функция startup_hook; если он опущен или равен None, любая уже установленная функция-перехватчик удаляется. Функция startup_hook вызывается без аргументов непосредственно перед тем, как readline выводит первое приглашение.
- readline.set_pre_input_hook([function])¶
Устанавливает или удаляет функцию pre_input_hook. Если указан function, она будет использоваться как новая функция pre_input_hook; если он опущен или равен None, любая уже установленная функция-перехватчик удаляется. Функция pre_input_hook вызывается без аргументов после вывода первого приглашения и непосредственно перед тем, как readline начинает чтение вводимых символов.
- readline.set_completer([function])¶
Устанавливает или удаляет функцию завершения (completer). Если указан function, она будет использоваться как новая функция завершения; если он опущен или равен None, любая уже установленная функция завершения удаляется. Функция завершения вызывается в виде function(text, state), для state в 0, 1, 2, ..., пока она не вернёт значение, не являющееся строкой. Она должна возвращать следующее возможное завершение, начинающееся с text.
- readline.get_completer()¶
Возвращает функцию завершения или None, если функция завершения не была установлена.
- readline.get_completion_type()¶
Возвращает тип выполняемого завершения.
- readline.get_begidx()¶
Возвращает начальный индекс области автодополнения readline.
- readline.get_endidx()¶
Возвращает конечный индекс области автодополнения readline.
- readline.set_completer_delims(string)¶
Устанавливает разделители слов readline для автодополнения.
- readline.get_completer_delims()¶
Возвращает разделители слов readline для автодополнения.
- readline.set_completion_display_matches_hook([function])¶
Устанавливает или удаляет функцию отображения завершений. Если указан function, она будет использоваться как новая функция отображения завершений; если он опущен или равен None, любая уже установленная функция отображения завершений удаляется. Функция отображения завершений вызывается в виде function(substitution, [matches], longest_match_length) каждый раз, когда необходимо отобразить совпадения.
- readline.add_history(line)¶
Добавляет строку в буфер истории, как если бы это была последняя введённая строка.
См. также
- Модуль rlcompleter
- Завершение идентификаторов Python в интерактивном приглашении.
6.7.1. Пример¶Example
Следующий пример демонстрирует, как использовать функции чтения и записи истории модуля readline для автоматической загрузки и сохранения файла истории с именем .pyhist из домашнего каталога пользователя. Код ниже обычно выполняется автоматически во время интерактивных сеансов из файла PYTHONSTARTUP.
import os
import readline
histfile = os.path.join(os.path.expanduser("~"), ".pyhist")
try:
readline.read_history_file(histfile)
except FileNotFoundError:
pass
import atexit
atexit.register(readline.write_history_file, histfile)
del os, histfile
Следующий пример расширяет класс code.InteractiveConsole для поддержки сохранения и восстановления истории.
import code
import readline
import atexit
import os
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.write_history_file(histfile)