Я работаю над интерпретатором python по умолчанию в Mac OS X, а я Cmd + K (очистил) свои предыдущие команды. Я могу пройти через них один за другим, используя клавиши со стрелками. Но есть ли опция -история в оболочке bash, которая показывает вам все команды, которые вы ввели до сих пор?
Как вы видите всю историю команд в интерактивном python?
Ответ 1
Используйте readline.get_current_history_length()
, чтобы получить длину, и readline.get_history_item()
для просмотра каждого из них.
Ответ 2
Код для печати всей истории (только для дальнейшего использования):
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))
Изменить: примечание get_history_item()
проиндексировано от 1 до n.
Ответ 3
С интерпретатором python 3 история записывается в ~/.python_history
Ответ 4
Так как вышеупомянутое работает только для python 2.x для python 3.x(в частности, 3.5) аналогичен, но с небольшой модификацией:
import readline
for i in range(readline.get_current_history_length()):
print (readline.get_history_item(i + 1))
обратите внимание на extra()
(используя сценарии оболочки для синтаксического анализа .python_history или использования python для изменения вышеуказанного кода, это вопрос личного вкуса и ситуации imho)
Ответ 5
Если вы хотите записать историю в файл:
import readline
readline.write_history_file('python_history.txt')
Функция справки дает:
Help on built-in function write_history_file in module readline:
write_history_file(...)
write_history_file([filename]) -> None
Save a readline history file.
The default filename is ~/.history.
Ответ 6
Простая функция для получения истории, аналогичной версии 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. Образцы:
Full History:
ipyhistory()
Last 10 History:
ipyhistory(10)
First 10 History:
ipyhistory(-10)
Надеюсь, это поможет ребятам.
Ответ 7
В IPython %history -g
должен отображать всю историю команд. Конфигурация по умолчанию также сохраняет вашу историю в файл с именем .python_history в вашем пользовательском каталоге.
Ответ 8
Это должно дать вам команды, напечатанные в отдельных строках:
import readline
map(lambda p:print(readline.get_history_item(p)),
map(lambda p:p, range(readline.get_current_history_length()))
)
Ответ 9
@Джейсон-В, это действительно помогает, спасибо. то я нашел этот пример и составлен для собственного фрагмента.
#!/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