Как сохранить интерактивный сеанс Python?
Я часто использую интерпретатор Python для работы с базами данных, файлами и т.д. — в основном много ручного форматирования полуструктурированных данных. Я не правильно сохраняю и очищаю полезные бит так часто, как хотелось бы. Есть ли способ сохранить мой ввод в оболочку (соединения db, назначения переменных, мало для циклов и бит логики) — некоторая история интерактивного сеанса? Если я использую что-то вроде script , я получаю слишком много шума stdout. Мне не нужно разбирать все объекты, хотя, если есть решение, которое делает это, все будет в порядке. В идеале я просто остался бы с script, который запускался как тот, который я создал в интерактивном режиме, и я мог просто удалить биты, которые мне не нужны. Есть ли пакет, который делает это, или подход DIY?
ОБНОВЛЕНИЕ: Я действительно поражен качеством и полезностью этих пакетов. Для пациентов с аналогичным зудом:
- IPython — должен был использовать это целую вечность, что я имел в виду
- reinteract — очень впечатляюще, я хочу больше узнать о визуализации, и похоже, что он будет сиять там. Сортировка рабочего стола gtk/gnome, которое отображает графики внутри. Представьте себе гибридный калькулятор + графический калькулятор + мини-затмение. Распределение источников здесь: http://www.reinteract.org/trac/wiki/GettingIt. Встроенный в Ubuntu, интегрируется в настольный компьютер gnome, Windows и Mac.
- bpython — очень круто, много приятных функций, автозаполнение (!), перемотка назад, одно нажатие клавиши для сохранения в файл, отступы, отлично сработано. Распространение исходного кода Python, вытащил пару зависимостей из sourceforge.
Я преобразован, они действительно заполняют потребность между интерпретатором и редактором.
IPython: замена стандартного Python shell
Python shell достаточно удобная вещь для тестирования и изучения возможностей языка, кто-то даже использует его в качестве калькулятора(что между прочим весьма удобно), в этом цикле статей я бы хотел рассказать о IPython — замене стандартного Python shell’а, который предоставляет расширенный список возможностей, что делает работу с ним более эффективной.
Скачать и установить IPython можно с официального сайта
Пространство имен
Запускаем IPython shell командой ‘ipython’, как и в в стандартном Python shell’е мы можем присваивать переменным значения:
In [1]: msgflag = 1
In [3]: msg = «hello»
In [4]: warning = None
Во время ввода можно пользоваться автокомплитом, например набрав msg и нажав Tab, мы получим возможные варианты:
In [5]: msg
msg msgflag
Если вариант один, то он автоматически появится в поле ввода.
IPython предоставлять возможность использования пространств имен, например, команда ‘who’ выводит список доступных переменных:
In [5]: who
msg msgflag pi warning
Она имеет ряд опций, например, чтобы вывести переменные типа int, следует написать:
In [6]: who int
msgflag pi
Если требуется получить дополнительную информацию о переменных, можно воспользоваться командой ‘whos’:
Так же есть возможность поиска по имени переменной, для этого нужно использовать команду ‘psearch’:
In [8]: psearch msg*
msg
msgflag
Возможно расширить критерии поиска типом переменной, например:
In [9]: psearch msg* int
msgflag
Для того чтобы сохранить переменную в профайле(она будет доступна после перезапуска IPython) есть команда ‘store’:
In [10]: store msgflag
Stored ‘msgflag’ (int)
Так же есть возможность сохранить переменную в отдельный файл:
In [11]: store msgflag > /tmp/m.txt
Writing ‘msgflag’ (int) to file ‘/tmp/m.txt’.
Чтобы посмотреть сохраненные переменные, вводится команда ‘store’ без параметров:
In [12]: store
Stored variables and their in-db values:
msgflag -> 1
Чтобы очистить текущее пространство имен, воспользуемся командой ‘reset’ и убедимся, что оно очистилось при помощи команды ‘who’:
In [13]: reset
Once deleted, variables cannot be recovered. Proceed (y/[n])? y
In [14]: who
Interactive namespace is empty.
Можно восстановить переменные, которые были ранее сохранены при помощи команды ‘store’ и убедиться, что они восстановились командой ‘who’:
In [15]: store -r
In [16]: who
msgflag
Так же можно очистить все, что находится в store и при следующем старте пространство имен будет пустым:
In [17]: store -z
Логгирование
Другая полезная возможность IPython — логгирование. Команда ‘logstate’ проверяет текущее состояние логгера:
In [18]: logstate
Logging has not been activated.
Командой ‘logstart’ можно начать логгирование:
In [19]: logstart
Activating auto-logging. Current session state plus future input saved.
Filename : ipython_log.py
Mode : rotate
Output logging : False
Raw input log : False
Timestamping : False
State : active
Лог сохраняется в текущей директории как исходный код Python
Команды ‘logon’ и ‘logoff’ используются для включения/выключения логгирования:
In [20]: logoff
Switching logging OFF
In [21]: logon
Switching logging ON
Магические команды
Команды, описанные выше в терминологии IPython называются magic commands(магические команды). Для того, чтобы посмотреть полный список magic команд, нужно ввести ‘lsmagic’:
In [22]: lsmagic
Available magic functions:
%Exit %Pprint %Quit %alias %autocall %autoindent %automagic %bg %bookmark %cd %clear %color_info %colors %cpaste %debug %dhist %dirs %doctest_mode %ed %edit %env %exit %hist %history %logoff %logon %logstart %logstate %logstop %lsmagic %macro %magic %p %page %pdb %pdef %pdoc %pfile %pinfo %popd %profile %prun %psearch %psource %pushd %pwd %pycat %quickref %quit %r %rehash %rehashx %rep %reset %run %runlog %save %sc %store %sx %system_verbose %time %timeit %unalias %upgrade %who %who_ls %whos %xmode
Automagic is ON, % prefix NOT needed for magic functions.
Магические команды могут использовать знак процента в качестве префикса. Это полезно в случае, если имя переменной совпадает с именем команды.
Для вызова помощи по всем магическим командам используется ‘magic’ команда. Для получения справки по определенный магической команды достаточно просто поставить знак вопроса в конце:
In [23]: lsmagic?
Type: Magic function
Base Class: <type ‘instancemethod’>
String Form: <bound method InteractiveShell.magic_lsmagic of <IPython.iplib.InteractiveShell object at 0x9e5ef0>>
Namespace: IPython internal
File: /Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/site-packages/ipython-0.9.1-py2.5.egg/IPython/Magic.py
Definition: lsmagic(self, parameter_s=»)
Docstring:
List currently available magic functions.
Для получения дополнительной информации следует ввести 2 знака вопроса в конце команды, в таком случае выводится и исходный код команды-функции.
Для переменных определенных самостоятельно, можно так же использовать знак вопроса:
In [24]: msgflag?
Type: int
Base Class: <type ‘int’>
String Form: 1
Namespace: Interactive
Docstring:
int(x[, base]) -> integer
Convert a string or number to an integer, if possible. A floating point
argument will be truncated towards zero .
Некоторые «косметические» команды
Можно использовать ‘p’ как сокращение для ‘print’:
In [25]: import sys
In [26]: p sys.path
[», ‘/Library/Frameworks/Python.framework/Versions/2.5/bin’, ‘/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/site-packages/setuptools-0.6c9-py2.5.egg’, ‘/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/site-packages/bdist_mpkg-0.4.3-py2.5.egg’, ‘/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/site-packages/macholib-1.1-py2.5.egg’,
.
Так же можно пользоваться сокращенной формой для вызова функций:
In [27]: def x(a, b):
. print a, b
.
.
Для вызова функции можно сделать так:
In [29]: def x(): print «123»
.
Можно вызвать функцию, которая в качестве параметров принимает строки, без необходимости заключать их в кавычки:
In [31]: def x(a,b): print «%s-%s» % (a, b)
.
In [32]: , x astr bstr
——-> x(«astr», «bstr»)
astr-bstr
Интроспекция
Если вы забыли какие аргументы нужны для вызова функции или метода, вы всегда можете узнать это при помощи команды ‘pdef’:
In [37]: import re
In [38]: pdef re.match
re.match(pattern, string, flags=0)
Так же можно посмотреть документацию по этой функции:
In [39]: pdoc re.match
Class Docstring:
Try to apply the pattern at the start of the string, returning
a match object, or None if no match was found.
Calling Docstring:
x.__call__(. ) <==> x(. )
Всю информацию о функции можно посмотреть при помощи команды ‘pinfo’:
In [40]: pinfo re.match
Type: function
Base Class: <type ‘function’>
String Form: <function match at 0xaa2b70>
Namespace: Interactive
File: /Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/re.py
Definition: re.match(pattern, string, flags=0)
Docstring:
Try to apply the pattern at the start of the string, returning
a match object, or None if no match was found.
Вы так же можете посмотреть исходный код функции:
In [41]: psource re.match
def match(pattern, string, flags=0):
«»»Try to apply the pattern at the start of the string, returning
a match object, or None if no match was found.»»»
return _compile(pattern, flags).match(string)
Если вы хотите посмотреть исходный код файла, в котором определен тот или иной объект, используйте команду ‘pfile’:
In [42]: pfile re.match
Так же можно запустить ваш любимый редактор для редактирования файла, в котором определен тот или иной объект:
In [43]: edit -x re.match
Editing.
Ссылки на источники
PS: На этом пока все, если эта тема кому-то интересна, то в следующих статьях продолжу описание возможностей IPython.
Как сохранить интерактивный сеанс Python?
Я часто использую интерпретатор Python для работы с базами данных, файлами и т.д. — в основном это ручное форматирование полуструктурированных данных. Я не сохраняю и не убираю полезные части так часто, как мне хотелось бы. Есть ли способ сохранить мой ввод в оболочку (соединения с базами данных, назначения переменных, немного циклов for и кусочки логики) — немного истории интерактивного сеанса? Если я использую что-то вроде script Я получаю слишком много стандартного шума. Мне действительно не нужно мариновать все объекты — хотя, если есть решение, которое делает это, все будет в порядке. В идеале мне нужно было бы просто оставить сценарий, который запускался бы как тот, который я создал в интерактивном режиме, и я мог бы просто удалить ненужные биты. Есть пакет, который делает это, или подход «сделай сам»?
задан 03 июн ’09, 20:06
20 ответы
IPython чрезвычайно полезен, если вам нравится использовать интерактивные сеансы. Например, для вашего варианта использования есть что собой представляет %save магическая команда, вы просто вводите %save my_useful_session 10-20 23 для сохранения входных строк с 10 по 20 и 23 в my_useful_session.py (чтобы помочь с этим, каждая строка имеет префикс своего номера).
Кроме того, в документации указано:
Эта функция использует тот же синтаксис, что и % история для диапазонов ввода, затем сохраняет строки в указанном вами имени файла.
Это позволяет, например, ссылаться на более старые сеансы, такие как
смотреть на видео на странице презентации чтобы получить краткий обзор функций.
Как сохранить все строки? Без указания диапазона создается пустой файл. 🙁 — балки
@balki, приглашение IPython сообщает вам, сколько строк в вашей истории (т. е. In[48] ). Так save filename 1-48 сохранит всю вашу сессию. — Бен Пейдж
Кроме того, можно ли загрузить этот файл обратно в ipython и сохранить историю ввода нетронутой? — Бен Пейдж
@BenPage Используйте «ipython -i [filename]» в сохраненном файле .py из приглашения bash, чтобы загрузить файл обратно перед возвратом в интерактивную консоль! (без флага -i вы не получите интерактивную консоль после запуска файла). — Самуэль Лампа
@ user4779, как и следовало ожидать: %load my_useful_session — Даниэль Серодио
ответ дан 15 мар ’12, в 13:03
Создает для меня пустой файл в Windows 7 — Убершмекель
Сработало для меня как шарм в Ubuntu. — Джондт
Неудачи на моем TI-83 — Дан
Не забудьте сделать это в конце сеанса. Моя выглядела немного пустой после вызова функции только в начале. — дельф333
Eсть путь сделать это. Сохраните файл в
а затем установите переменную среды PYTHONSTARTUP в вашей оболочке (например, в
Вы также можете добавить это, чтобы получить автозаполнение бесплатно:
Обратите внимание, что это будет работать только в системах * nix. Поскольку строка чтения доступна только на платформе Unix.
ответ дан 01 дек ’14, 13:12
Mac OS X использует строку редактирования, поэтому доступна функция заполнения табуляции, но точная команда отличается: readline.parse_and_bind («bind ^ I rl_complete») — миль
Это было безумно быстро, Надя, большое спасибо. Я попробую оба ответа — целевая платформа — Ubuntu, BTW — неокантованный
readline.parse_and_bind(‘tab: complete’) работает, если вы используете MacPorts Python. — Филипп Клауд
Это должно быть оформлено. Работал на RHEL 6.6. Pyenv, 2.7.10. — БиллиАм
Почему я не искал это все эти годы! Это отличное решение, так как в нем используется оригинальный инструмент, быстрый и легкий. — иман
Если вы используете IPython вы можете сохранить в файл все свои предыдущие команды, используя волшебную функцию % история с -f параметр, pe:
ответ дан 30 апр.
Не был уверен в местонахождении файла, используя save магия. Это было очень полезно — alpha_989
Используйте %history -g -f full_history.py чтобы получить историю всех сеансов, а не только текущего. Смотрите также: документация для% history. — Евгений Сергеев
После установки Ипайтони открыв сеанс Ipython, выполнив команду:
из командной строки просто запустите следующую «волшебную» команду Ipython, чтобы автоматически регистрировать весь сеанс Ipython:
Это создаст файл .py с уникальным именем и сохранит ваш сеанс для последующего использования в качестве интерактивного сеанса Ipython или для использования в сценариях по вашему выбору.
ответ дан 30 окт ’14, 21:10
Таким образом, повторно взаимодействовать дает вам интерфейс, похожий на записную книжку, для сеанса Python.
reinteract теперь заменен IPython Notebook и QtConsole. — Эрик О Лебигот
Помимо IPython аналогичная утилита bpython есть функция «сохранить введенный вами код в файл»
Кто-нибудь может объяснить, как это делается с помощью bpython? Я попробовал ctrl + s, но это не сработало (версия 0.14.2 поверх Python 3.4.3 с терминалом Gnome) — Ибо Ян
По умолчанию он привязан к F7. F1 покажет вам справку и текущие сочетания клавиш. — Джим К.
F7 запускает внешний редактор. Ctrl + s должен запрашивать простую функцию сохранения в файл, но она обязательно должна «останавливаться» в bash и zsh, поэтому вам нужно будет выбрать альтернативу в конфигурации bpython. — RCross
Мне пришлось изо всех сил найти ответ, я был очень новичком в среде iPython.
Это будет работать
Если ваш сеанс iPython выглядит так
Вы хотите сохранить строки от 1 до 135, а затем в том же сеансе ipython используйте эту команду
Это сохранит все ваши операторы python в файле test.py в вашем текущем каталоге (где вы инициировали ipython).
ответ дан 22 авг.
Существует магия% history для печати и сохранения истории ввода (и, возможно, вывода).
Чтобы сохранить текущий сеанс в файле с именем my_history.py :
История IPython хранит как введенные вами команды, так и полученные результаты. Вы можете легко выполнять предыдущие команды с помощью клавиш со стрелками вверх и вниз или получить доступ к своей истории более сложными способами.
Вы можете использовать волшебную функцию% history для изучения прошлого ввода и вывода. История ввода из предыдущих сеансов сохраняется в базе данных, и IPython можно настроить для сохранения истории вывода.
Несколько других волшебных функций могут использовать вашу историю ввода, включая% edit,% rerun,% вспоминание,% macro,% save и% pastebin. Вы можете использовать стандартный формат для ссылки на строки:
Это займет строку 3 и строки с 18 по 20 из текущего сеанса и строки 1-5 из предыдущего сеанса.
Посмотреть% историю? для строки документации и других примеров.
Также обязательно изучите возможности % магазин магии для облегчения сохранения переменных в IPython.
Сохраняет переменные, псевдонимы и макросы в базе данных IPython.
ipython учебник
Начало работы с ipython
IPython является оболочкой Read-Evaluate-Print Loop для интерактивной разработки Python. Он поддерживает интерактивную визуализацию с использованием графических инструментов GUI и предоставляет ядро для Jupyter . Он также может быть встроен в другие проекты.
Существуют и другие аналогичные оболочки REPL для Python, например, ptpython и bpython .
Версии
| Версия | Дата выхода |
|---|---|
| 5.0.0 | 2016-07-07 |
| 4.2.0 | 2016-04-20 |
| 4.1.0 | 2016-02-02 |
| 4.0.0 | 2015-08-12 |
| 3.2.0 | 2015-06-21 |
| 3.1.0 | 2015-04-03 |
| 3.0.0 | 2015-02-27 |
| 2.4.0 | 2015-01-30 |
| 2.3.0 | 2014-10-01 |
| 2.2.0 | 2014-08-06 |
| 2.1.0 | 2014-05-21 |
| 2.0.0 | 2014-04-02 |
| 0,13 | 2012-06-30 |
| 0,12 | 2011-12-19 |
| 0,11 | 2011-07-31 |
| 0,10 | 2010-09-01 |
| 0.9 | 2008-09-13 |
Установка и использование
Как и встроенная интерактивная оболочка python , IPython представляет собой оболочку REPL ( Read-Evaluate-Print Loop ) с множеством функций, которые делают ее более приятной для повседневной разработки Python, чем встроенная оболочка REPL ,
Монтаж
Чтобы установить его:
использование
После установки запустите его, используя Python по умолчанию (2 или 3), используя:
Или использовать Python 3:
Получать помощь
Это дает вам представление и обзор функций IPython.
Здесь перечислены все методы и поля объекта и его документации (если он существует).
То же, что и выше, обеспечивает еще более подробную информацию об объекте, в частности попытается найти и отобразить исходный код для объекта.
TAB -completion, который перечисляет и итерации через доступные поля / методы объекта. Из-за динамической природы Python не все методы могут быть обнаружены таким образом. Также частные методы (начиная с _ ) будут скрыты по умолчанию, вставьте _ и снова нажмите TAB, чтобы отобразить их.
Это отображает краткую ссылку для оболочки IPython.
IPython против Jupyter
IPython имеет две части: интерфейс командной строки, который заменяет REPL по умолчанию python и способ запуска Python через веб-браузер в качестве графического интерфейса пользователя.
С последними разработками часть браузера была разделена на проект Jupyter, который позволяет использовать несколько языков программирования для использования графического интерфейса. Для этого по-прежнему можно использовать IPython как ядро Python.
Обновленные инструкции по настройке для Jupyter можно найти в официальных документах по установке .
ipython или jupyter console , при вызове из командной строки без каких-либо других параметров введите сеанс интерактивного терминала, как jupyter console ниже:
jupyter qtconsole или ipython qtconsole до версии 5 , запустит консоль с несколькими вкладками QT:
jupyter notebook или ipython notebook до версии 5 , запустит сервер и по умолчанию откроет веб-страницу по адресу http://localhost:8888/tree с представлением «Главная» текущего каталога. Это позволяет вам открыть существующие ноутбуки или новые ядра на нескольких языках, в зависимости от того, что вы установили ; каждый из них будет открыт на новой вкладке браузера.
Ноутбуки позволяют смешивать маркировку, включая MathJax , код из выбранного вами ядра, графики и графики, изображения и даже видео.
Вставка в IPython
Это основной метод магии для вставки. Он напрямую вставляет текст из системного буфера обмена, разумно обрабатывая общие проблемы с символами новой строки и отступом.
Если вы используете IPython через SSH, вместо этого используйте %cpaste , так как ему не нужен доступ к буферу удаленной системы.
Начиная с IPython 5.0.0, усовершенствованный инструментарий подсказок должен непосредственно обрабатывать многострочный код без необходимости в %paste или %cpaste .
Сохранять переменные на IPython
%storemagic хранит переменные и макросы в базе данных IPython. Чтобы автоматически восстановить сохраненные переменные при запуске, добавьте это в ipython_config.py :
Следует отметить, что если вы измените значение переменной, вам нужно будет сохранить ее снова, если вы хотите сохранить новое значение.
Заметим также, что переменные должны быть разборчивыми; большинство основных типов python могут быть безопасно% store'd.