как вы видите всю историю команд в интерактивном питон?
Я работаю над интерпретатором python по умолчанию на Mac OS X, и я Cmd+K (очищен) мои предыдущие команды. Я могу пройти через них один за другим, используя клавиши со стрелками. Но есть ли опция, подобная опции --history в оболочке bash, которая показывает вам все команды, которые вы ввели до сих пор?
8 ответов:
использовать
readline.get_current_history_length()чтобы получить длину, иreadline.get_history_item()для просмотра каждого.
код для печати всей истории (только для дальнейшего использования):
python2
import readline for i in range(readline.get_current_history_length()): print readline.get_history_item(i + 1)python3
import readline for i in range(readline.get_current_history_length()): print (readline.get_history_item(i + 1))Edit: Примечание:
get_history_item()индексируется от 1 до n.
Так как выше работает только для python 2.икс для python 3.x (в частности 3.5) похож, но с небольшой модификацией:
import readline for i in range(readline.get_current_history_length()): print (readline.get_history_item(i + 1))обратите внимание на дополнительный ()
(использование сценариев оболочки для разбора .python_history или использование python для изменения вышеуказанного кода-это вопрос личного вкуса и ситуации imho)
Если вы хотите записать историю в файл:
import readline with open('pyhistory.txt', 'w') as f: for i in range(readline.get_current_history_length()): f.write(readline.get_history_item(i + 1) + "\n")
@Jason-V, это действительно помогает, спасибо. затем, я нашел этой примеры и составлены для собственного сниппета.
#!/usr/bin/env python3 import os, readline, atexit python_history = os.path.join(os.environ['HOME'], '.python_history') try: readline.read_history_file(python_history) readline.parse_and_bind("tab: complete") readline.set_history_length(5000) atexit.register(readline.write_history_file, python_history) except IOError: pass del os, python_history, readline, atexit
Это должно дать Вам команды, напечатанные в отдельных строках:
import readline map(lambda p:print(readline.get_history_item(p)), map(lambda p:p, range(readline.get_current_history_length())) )
простая функция, чтобы получить историю, похожую на версию unix / bash.
надеюсь, что это поможет некоторым новым людям.
def ipyhistory(lastn=None): """ param: lastn Defaults to None i.e full history. If specified then returns lastn records from history. Also takes -ve sequence for first n history records. """ import readline assert lastn is None or isinstance(lastn, int), "Only integers are allowed." hlen = readline.get_current_history_length() is_neg = lastn is not None and lastn < 0 if not is_neg: flen = len(str(hlen)) if not lastn else len(str(lastn)) for r in range(1,hlen+1) if not lastn else range(1, hlen+1)[-lastn:]: print(": ".join([str(r if not lastn else r + lastn - hlen ).rjust(flen), readline.get_history_item(r)])) else: flen = len(str(-hlen)) for r in range(1, -lastn + 1): print(": ".join([str(r).rjust(flen), readline.get_history_item(r)]))сниппет: протестирован с Python3. Дайте мне знать, если есть какие-то глюки с python2. Образцы:
Полная История :
ipyhistory()Последние 10 История:
ipyhistory(10)Первые 10 История:
ipyhistory(-10)надеюсь, что это помогает парни.
Comments