Постоянная история в модуле 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()
метод и записать введенные команды самостоятельно.