Подтвердить что ты не робот

Экспортировать историю интерпретатора Python в файл?

Много раз я буду использовать интерпретатор Python для проверки переменных и выполнения команд до того, как я действительно напишу в файл. Однако к концу у меня есть около 30 команд в интерпретаторе и их нужно скопировать/вставить в файл для запуска. Есть ли способ экспортировать/записать историю интерпретатора Python в файл?

Например

>>> a = 5
>>> b = a + 6
>>> import sys
>>> export('history', 'interactions.py') 

И затем я могу открыть файл interactions.py и прочитать:

a = 5
b = a + 6
import sys
4b9b3361

Ответ 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.