Постоянная история в модуле Python cmd

Есть ли способ настроить модуль CMD из Python для сохранения постоянной истории даже после закрытия интерактивной оболочки?

Когда я нажимаю клавиши "вверх" и "вниз", я хотел бы получить доступ к командам, которые ранее вводились в оболочку в предыдущих случаях, когда я запускал скрипт python, а также те, которые я только что вводил во время этой сессии.

Если его любая помощь использует CMD set_completer импортировано из модуля readline

1 ответ

Решение

readline автоматически сохраняет историю всего, что вы вводите. Все, что вам нужно добавить - это хуки для загрузки и сохранения этой истории.

использование readline.read_history_file(filename) читать файл истории. использование readline.write_history_file() сказать readline чтобы сохранить историю до сих пор. Вы можете использовать readline.set_history_length() чтобы этот файл не рос без границ:

import os.path
try:
    import readline
except ImportError:
    readline = None

histfile = os.path.expanduser('~/.someconsole_history')
histfile_size = 1000

class SomeConsole(cmd.Cmd):
    def preloop(self):
        if readline and os.path.exists(histfile):
            readline.read_history_file(histfile)

    def postloop(self):
        if readline:
            readline.set_history_length(histfile_size)
            readline.write_history_file(histfile)

Я использовал Cmd.preloop() а также Cmd.postloop() перехватывает, чтобы вызвать загрузку и сохранение к точкам, где командный цикл начинается и заканчивается.

Если у вас нет readline установлен, вы можете смоделировать это еще, добавив precmd() метод и записать введенные команды самостоятельно.

Другие вопросы по тегам