Экспортировать историю интерпретатора Python в файл?
Много раз я буду использовать интерпретатор Python для проверки переменных и выполнения команд до того, как я действительно напишу в файл. Однако к концу у меня есть около 30 команд в интерпретаторе и их нужно скопировать/вставить в файл для запуска. Есть ли способ экспортировать/записать историю интерпретатора Python в файл?
Например
>>> a = 5
>>> b = a + 6
>>> import sys
>>> export('history', 'interactions.py')
И затем я могу открыть файл interactions.py
и прочитать:
a = 5
b = a + 6
import sys
Ответы
Ответ 1
IPython чрезвычайно полезен, если вам нравится использовать интерактивные сеансы. Например, для вашего usecase есть команда save, вы просто вводите save my_useful_session 10-20 23, чтобы сохранить строки ввода от 10 до 20 и 23 до my_useful_session.py. (чтобы помочь с этим, каждая строка имеет префикс его номера)
Посмотрите видео на странице документации, чтобы получить быстрый обзор функций.
:: ИЛИ::
Для этого существует способ. Сохраните файл в ~/.pystartup
# Add auto-completion and a stored history file of commands to your Python
# interactive interpreter. Requires Python 2.0+, readline. Autocomplete is
# bound to the Esc key by default (you can change it - see readline docs).
#
# Store the file in ~/.pystartup, and set an environment variable to point
# to it: "export PYTHONSTARTUP=/home/user/.pystartup" in bash.
#
# Note that PYTHONSTARTUP does *not* expand "~", so you have to put in the
# full path to your home directory.
import atexit
import os
import readline
import rlcompleter
historyPath = os.path.expanduser("~/.pyhistory")
def save_history(historyPath=historyPath):
import readline
readline.write_history_file(historyPath)
if os.path.exists(historyPath):
readline.read_history_file(historyPath)
atexit.register(save_history)
del os, atexit, readline, rlcompleter, save_history, historyPath
Вы также можете добавить это, чтобы получить автозаполнение бесплатно:
readline.parse_and_bind('tab: complete')
Обратите внимание, что это будет работать только в системах * nix. Поскольку readline доступен только на платформе Unix.
Ответ 2
Если вы используете Linux/Mac и имеете библиотеку readline, вы можете добавить следующее в файл и экспортировать его в свой .bash_profile
, и у вас будет как завершение, так и история.
# python startup file
import readline
import rlcompleter
import atexit
import os
# tab completion
readline.parse_and_bind('tab: complete')
# history file
histfile = os.path.join(os.environ['HOME'], '.pythonhistory')
try:
readline.read_history_file(histfile)
except IOError:
pass
atexit.register(readline.write_history_file, histfile)
del os, histfile, readline, rlcompleter
Экспорт команды:
export PYTHONSTARTUP=path/to/.pythonstartup
Это сохранит вашу историю консоли python в ~/.pythonhistory
Ответ 3
Следующее - это не моя собственная работа, но, честно говоря, я не помню, где я ее впервые получил... Однако: поместите следующий файл (в систему GNU/Linux) в свою домашнюю папку (имя файла должен быть .pystartup.py
):
# Add auto-completion and a stored history file of commands to your Python
# interactive interpreter. Requires Python 2.0+, readline. Autocomplete is
# bound to the Esc key by default (you can change it - see readline docs).
#
# Store the file in ~/.pystartup, and set an environment variable to point
# to it, e.g. "export PYTHONSTARTUP=/max/home/itamar/.pystartup" in bash.
#
# Note that PYTHONSTARTUP does *not* expand "~", so you have to put in the
# full path to your home directory.
import atexit
import os
import readline
import rlcompleter
historyPath = os.path.expanduser("~/.pyhistory")
historyTmp = os.path.expanduser("~/.pyhisttmp.py")
endMarkerStr= "# # # histDUMP # # #"
saveMacro= "import readline; readline.write_history_file('"+historyTmp+"'); \
print '####>>>>>>>>>>'; print ''.join(filter(lambda lineP: \
not lineP.strip().endswith('"+endMarkerStr+"'), \
open('"+historyTmp+"').readlines())[-50:])+'####<<<<<<<<<<'"+endMarkerStr
readline.parse_and_bind('tab: complete')
readline.parse_and_bind('\C-w: "'+saveMacro+'"')
def save_history(historyPath=historyPath, endMarkerStr=endMarkerStr):
import readline
readline.write_history_file(historyPath)
# Now filter out those line containing the saveMacro
lines= filter(lambda lineP, endMarkerStr=endMarkerStr:
not lineP.strip().endswith(endMarkerStr), open(historyPath).readlines())
open(historyPath, 'w+').write(''.join(lines))
if os.path.exists(historyPath):
readline.read_history_file(historyPath)
atexit.register(save_history)
del os, atexit, readline, rlcompleter, save_history, historyPath
del historyTmp, endMarkerStr, saveMacro
Затем вы получите все лакомства, которые поставляются с оболочкой bash (стрелки вверх и вниз, перемещающие историю, ctrl-r для обратного поиска и т.д.).
Ваша полная история команд будет сохранена в файле, расположенном по адресу: ~/.pyhistory
.
Я использую это с возрастом, и у меня никогда не было проблемы.
НТН!
Ответ 4
В оболочке python:
%history
Команда будет печатать все команды, которые вы ввели в текущую оболочку python.
% history -g
Команда будет печатать все команды, зарегистрированные в оболочке python, до некоторого значительного числа строк.
%history -g -f history.log
Будет записывать записанные команды вместе с номером строки. вы можете удалить номера строк фиксированной ширины для интересующих команд с помощью gvim.
Ответ 5
Python в Linux должен иметь поддержку истории через библиотеку readline, см. http://docs.python.org/tutorial/interactive.html