Как сохранить интерактивный сеанс Python?



Я часто использую интерпретатор Python для работы с базами данных, файлами и т. д.-В основном много ручного форматирования полуструктурированных данных. Я не правильно сохраняю и очищаю полезные биты так часто, как хотелось бы. Есть ли способ сохранить мой вход в оболочку (соединения с БД, назначения переменных, немного для циклов и битов логики) - некоторая история интерактивного сеанса? Если я использую что-то вроде script Я получаю слишком много шума stdout. Мне действительно не нужно солить все объекты, хотя если есть решение, что это было бы нормально. В идеале я бы просто остался со скриптом, который работал как тот, который я создал в интерактивном режиме, и я мог бы просто удалить биты, которые мне не нужны. Есть ли пакет, который делает это, или подход DIY?



обновление: Я действительно поражен качеством и полезностью этих пакетов. Для тех, у кого похожий зуд:




  • IPython -- должен был использовать это в течение многих лет, то, что я имел в виду


  • reinteract -- очень впечатляет, я хочу узнать больше о визуализации, и это кажется, что он будет светить там. Своего рода настольное приложение gtk / gnome, которое отображает графики в строке. Представьте себе гибридную оболочку + графический калькулятор + мини-затмение. Источник распространения здесь:http://www.reinteract.org/trac/wiki/GettingIt . Построенный отлично на Ubuntu, интегрируется в gnome desktop, Windows и Mac установщики тоже.


  • bpython -- очень круто, много приятных функций, автозаполнение(!), перемотка назад, одно нажатие клавиши сохранить в файл, отступ, хорошо сделано. Распределение исходным кодом на языке Python, вытащил пару зависимостей с SourceForge.


Я преобразован, они действительно заполняют потребность между интерпретатором и редактором.

630   17  

17 ответов:

IPython очень полезно, если вам нравится использовать интерактивные сеансы. Например для вашего use-case есть the %save волшебная команда, вы просто введите %save my_useful_session 10-20 23 для сохранения входных строк от 10 до 20 и от 23 до my_useful_session.py (чтобы помочь с этим, каждая строка предваряется его количество).

кроме того, в документации говорится:

эта функция использует тот же синтаксис, как %история для входных диапазонов, затем сохраняет строки в имя файла, которое вы указываете.

Это позволяет, например, ссылаться на старые сессии, такие как

%save current_session ~0/
%save previous_session ~1/

посмотреть видео на странице презентации чтобы получить быстрый обзор функций.

http://www.andrewhjon.es/save-interactive-python-session-history

import readline
readline.write_history_file('/home/ahj/history')

есть путь сделать это. Сохраните файл в ~/.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

а затем установите переменную окружения PYTHONSTARTUP в командной строке (например,~/.bashrc):

export PYTHONSTARTUP=$HOME/.pystartup

вы также можете добавить это, чтобы получить автозаполнение бесплатно:

readline.parse_and_bind('tab: complete')

обратите внимание, что это будет работать только на *Nix системах. Поскольку readline доступен только в платформе Unix.

Если вы используете IPython вы можете сохранить в файл все ваши предыдущие команды с помощью функции magic %история С - f параметр, p. e:

%history -f /tmp/history.py

после установки Ipython, и открытие сеанса Ipython, выполнив команду:

ipython

из командной строки просто запустите следующую команду Ipython 'magic', чтобы автоматически зарегистрировать весь сеанс Ipython:

%logstart

это создаст файл с уникальным именем. py и сохранит ваш сеанс для последующего использования в качестве интерактивного сеанса Ipython или для использования в сценариях по вашему выбору.

и reinteract дает вам ноутбук-подобный интерфейс для сеанса Python.

в дополнение к IPython, аналогичная утилита bpython имеет функцию "Сохранить код, который вы ввели в файл"

мне пришлось бороться, чтобы найти ответ, я был очень новичком в среде iPython.

это будет работать

Если ваш сеанс iPython выглядит так

In [1] : import numpy as np
....
In [135]: counter=collections.Counter(mapusercluster[3])
In [136]: counter
Out[136]: Counter({2: 700, 0: 351, 1: 233})

вы хотите сохранить строки от 1 до 135, а затем в том же сеансе ipython использовать эту команду

In [137]: %save test.py 1-135

это сохранит все ваши операторы python в test.py файл в вашем текущем каталоге (где вы инициировали ipython).

есть % history magic для печати и сохранения входной истории (и, возможно, выход).

для сохранения текущего сеанса в файл с именем my_history.py:

>>> %hist -f my_history.py

история IPython хранит как команды, которые вы вводите, так и результаты, которые он производит. Вы можете легко пройти через предыдущие команды с помощью клавиш со стрелками вверх и вниз, или получить доступ к истории более сложными способами.

вы можете использовать магическую функцию %history для изучения прошлого ввода и выход. История ввода из предыдущих сеансов сохраняется в базе данных, и IPython можно настроить для сохранения истории вывода.

ряд других магических функций может использовать историю ввода, %изменение, %повтор, %напомним, %макроэлементы, %сохранение и %сайт Pastebin. Вы можете использовать стандартный формат для ссылки на строки:

%pastebin 3 18-20 ~1/1-5

это займет строку 3 и строки 18-20 из текущей сессии, а также строки 1-5 из предыдущей сессии.

посмотреть %истории? для строки документа и еще много примеров.

кроме того, не забудьте изучить возможности %store magic для легкого сохранения переменных в IPython.

хранит переменные, псевдонимы и макросы в базе данных IPython.

d = {'a': 1, 'b': 2}
%store d  # stores the variable
del d

%store -r d  # Refresh the variable from IPython's database.
>>> d
{'a': 1, 'b': 2}

чтобы автоматически сохранять сохраненные переменные при запуске, укажитеc.StoreMagic.autorestore = True in ipython_config.py.

просто положить еще одно предложение в миску: Spyder

enter image description here

Это журнал и переменной проводник!--11-->. Если вы работали с MatLab, то вы увидите сходство.

насколько Linux идет, можно использовать script команда для записи всего сеанса. Это часть util-linux пакет так должен быть на большинстве систем Linux . Вы можете создать и псевдоним или функцию, которая будет вызывать script -c python и это будет сохранено в . Например, вот перепечатка одного такого файла.

$ cat typescript                                                                                                      
Script started on Sat 14 May 2016 08:30:08 AM MDT
Python 2.7.6 (default, Jun 22 2015, 17:58:13) 
[GCC 4.8.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> print 'Hello Pythonic World'
Hello Pythonic World
>>> 

Script done on Sat 14 May 2016 08:30:42 AM MDT

небольшим недостатком здесь является то, что script записывает все, даже линейные каналы, когда вы нажимаете backspaces и т. д. Так что вы можете использовать col to очистите выход (см. этот пост на Unix & Linux Stackexchange).

есть еще один вариант --- pyslice. в " wxPython 2.8 Docs demos and tools "есть программа с открытым исходным кодом под названием"pyslices".

вы можете использовать его как редактор, а также поддерживать использование как консоль ---- выполнение каждой строки как интерактивный интерпретатор с немедленным эхом.

конечно, все блоки кодов и результаты каждого блока будут записаны в txt-файл автоматически.

результаты регистрируются сразу за соответствующий блок кода. очень удобно.

the overview of pyslices

The %history команда потрясающая, но, к сожалению, она не позволит вам сохранить вещи, которые были %paste 'd в sesh. Для этого я думаю, что вы должны сделать %logstartв начале (хотя я не подтвердил, что это работает).

то, что я люблю делать, это

%history -o -n -p -f filename.txt

который сохранит выход, номера строк и '>>>' перед каждым входом (параметры o, n и p). Смотрите также документацию к %История здесь.

некоторые комментарии спрашивали, как сохранить все входы IPython сразу. Для %save magic в IPython, вы можете сохранить все команды программно, как показано ниже, чтобы избежать сообщения приглашения, а также избежать указания входных чисел. currentLine = len (In)-1 %save-f my_session 1 - $currentLine

The -f опция используется для принудительной замены файлов и len(IN)-1 показывает текущее приглашение ввода в IPython, что позволяет сохранить весь сеанс программно.

для тех, кто использует spacemacs и ipython что происходит с python-layer, save magic создает много нежелательных выходных данных, из-за постоянной команды автоматического завершения, работающей в фоновом режиме, например:

len(all_suffixes)
';'.join(__PYTHON_EL_get_completions('''len'''))
';'.join(__PYTHON_EL_get_completions('''all_substa'''))
len(all_substantives_w_suffixes)
';'.join(__PYTHON_EL_get_completions('''len'''))
';'.join(__PYTHON_EL_get_completions('''all'''))
';'.join(__PYTHON_EL_get_completions('''all_'''))
';'.join(__PYTHON_EL_get_completions('''all_w'''))
';'.join(__PYTHON_EL_get_completions('''all_wo'''))
';'.join(__PYTHON_EL_get_completions('''all_wor'''))
';'.join(__PYTHON_EL_get_completions('''all_word'''))
';'.join(__PYTHON_EL_get_completions('''all_words'''))
len(all_words_w_logograms)
len(all_verbs)

чтобы избежать этого, просто сохраните буфер ipython, как вы обычно сохраняете любой другой:spc f s

Если вы используете bpython, вся ваша история команд по умолчанию сохраняется в ~/.pythonhist.

чтобы сохранить команды для последующего повторного использования, вы можете скопировать их в файл скрипта python:

$ cp ~/.pythonhist mycommands.py

затем изменить этот файл, чтобы очистить его и поместите его под путь Python (сайт глобальной или виртуальной среды-пакеты, текущий каталог, упоминание в *.pth, или каким-то другим способом).

чтобы включить команды в свою оболочку, просто импортируйте их из сохраненного файла:

>>> from mycommands import *

Я хотел бы предложить другой способ поддержания сеанса python через tmux на linux. вы запускаете tmux, прикрепляете себя к сеансу, который вы открыли (если не прикреплены после открытия его напрямую). выполните python и делайте все, что вы делаете на нем. затем отсоедините от сеанса. отсоединение от сеанса tmux не закрывает сеанс. сессия остается открытой.

плюсы этого метода: вы можете подключиться к этому сеансу с любого другого устройства (в случае, если вы можете ssh pc)

минусы этого метода: этот метод не освобождает ресурсы, используемые открытым сеансом python, пока вы фактически не создадите интерпретатор python.

Comments

    Ничего не найдено.