Уведомления

Группа в Telegram: @pythonsu

#1 Янв. 8, 2014 15:40:14

Budulianin
От:
Зарегистрирован: 2011-10-18
Сообщения: 1218
Репутация: +  33  -
Профиль   Отправить e-mail  

Как выполнить скрипт питона без компиляции в байт код

erebus
Не из самой программы, я имел в виду: приостановить программу->изменить код->продолжить выполнение.

Ты сейчас про дебаггер говоришь, если конечно знаешь, что это такое.



Офлайн

#2 Янв. 8, 2014 17:50:41

erebus
Зарегистрирован: 2014-01-07
Сообщения: 15
Репутация: +  1  -
Профиль   Отправить e-mail  

Как выполнить скрипт питона без компиляции в байт код

Singularity

хочешь дебагер
именно

Budulianin
Таки знаю, но не знаю как реализовать это в дебагере. Ибо продолжить выполнение нужно именно с места остановки, не теряя имеющиеся данные, но уже измененную программу.

Отредактировано erebus (Янв. 8, 2014 17:55:11)

Офлайн

#3 Янв. 8, 2014 18:59:53

o7412369815963
От:
Зарегистрирован: 2009-06-17
Сообщения: 1986
Репутация: +  32  -
Профиль   Отправить e-mail  

Как выполнить скрипт питона без компиляции в байт код

erebus
Почему тогда говорят что исходный код на Python интерпритируеться а на Java - компилируеться?
байткод java вроде компиллируется в машинный байт-код уже на месте запуска.

erebus
Ибо продолжить выполнение нужно именно с места остановки, не теряя имеющиеся данные, но уже измененную программу.
Это может быть не возможно т.к. программа может быть кардинально изменена - тогда не понято что делать при продолжении или бессмысленно.
Если места остановки будут “предопределенные”, тогда можно частично решить задачу, но это не про дебагер.

erebus
не теряя имеющиеся данные
Некоторые задачи можно решить так:
* Сбрасывать дамп данных в файл когда программа останавливается, и восстанавливать данные при запуске.
* Функционал делать оторванным - вызывать через celery или типа того. Тогда можно изменять функционал без перезагрузки основной программы.

Офлайн

#4 Янв. 8, 2014 19:13:30

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  253  -
Профиль   Отправить e-mail  

Как выполнить скрипт питона без компиляции в байт код

erebus
приостановить программу->изменить код->продолжить выполнение.
Именно это обычно и делается при работе практически из любой среды отладки. Для этого достаточно просто в отладчике выполнить питон код который изменит нужные вам определения. (Исходный текст программы можно менять, а можно и не менять)



Офлайн

#5 Янв. 8, 2014 19:19:42

Budulianin
От:
Зарегистрирован: 2011-10-18
Сообщения: 1218
Репутация: +  33  -
Профиль   Отправить e-mail  

Как выполнить скрипт питона без компиляции в байт код

o7412369815963
байткод java вроде компиллируется в машинный байт-код уже на месте запуска.

Байт-код и машинный код - разные вещи. JIT компилирует в машинный код.



Офлайн

#6 Янв. 8, 2014 21:12:49

bw
От:
Зарегистрирован: 2007-09-26
Сообщения: 938
Репутация: +  20  -
Профиль   Адрес электронной почты  

Как выполнить скрипт питона без компиляции в байт код

Теоретически такое возможно, но нужно хорошо знать внутренности интерпретатора, что бы не напортачить (и всё равно напортачишь). Из чистого Python не получится конечно, придётся использовать API CPython. В частности придётся править фреймы после перекомпиляции, а стеков может быть несколько: системные потоки, greenlet-ы, yield-ы. Ну и нужно понимать, как искать новую точку остановки после перекомпиляции, например при 100% изменении кода, это сделать будет невозможно.

Если точка остановки не произвольная, а предопределённая, то может получиться проще: сериализация, “перезагрузка” и всё что нужно, десериализация.

..bw



Офлайн

#7 Янв. 8, 2014 21:41:21

Singularity
Зарегистрирован: 2011-07-28
Сообщения: 1387
Репутация: +  75  -
Профиль   Отправить e-mail  

Как выполнить скрипт питона без компиляции в байт код

erebus
именно
Подробный ман http://habrahabr.ru/post/104086
Хотя если точка останова одна, то
import pdb;  pdb.set_trace()
а еще можно поставить ipdb тоже самое + автокомплит в консоли и еще что-то мб

Офлайн

#8 Янв. 9, 2014 18:17:46

erebus
Зарегистрирован: 2014-01-07
Сообщения: 15
Репутация: +  1  -
Профиль   Отправить e-mail  

Как выполнить скрипт питона без компиляции в байт код

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

Офлайн

#9 Янв. 10, 2014 00:48:29

bw
От:
Зарегистрирован: 2007-09-26
Сообщения: 938
Репутация: +  20  -
Профиль   Адрес электронной почты  

Как выполнить скрипт питона без компиляции в байт код

Посмотрите пакеты `byteplay`, `astoptimizer`, `withhacks` и пр. Может подчерпнёте для себя что-то полезное.

..bw



Офлайн

#10 Янв. 10, 2014 14:47:09

erebus
Зарегистрирован: 2014-01-07
Сообщения: 15
Репутация: +  1  -
Профиль   Отправить e-mail  

Как выполнить скрипт питона без компиляции в байт код

bw
Спасибо

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version