LINUX.ORG.RU

Любым удобным способом.

Непонятно, что за «самомодифицированный код» и нужна ли тебе переносимость, но сходу напрашиваются marshal и «тот формат, в котором все было с самого начала».

t184256 ★★★★★
()
import sys
import inspect

print (inspect.getsource(sys.modules[__name__]))
micronekodesu ★★★
()
Ответ на: комментарий от t184256

да ладно тебе, кучку классов он сохранить может, всяко проще чем желание ТСа сделать самомодифицирующийся вирус код на питоне.

system-root ★★★★★
()

В чем проблема вынести это в отдельный модуль. Питоша ведь может исполнять код путем интерпретации строки из памяти.

>>> s = "import math; print(\"sin= %f\" % math.sin(123))"
>>> exec(s)
sin= -0.459903

А строку храни где хош, хоть в файле.

I-Love-Microsoft ★★★★★
()
Последнее исправление: I-Love-Microsoft (всего исправлений: 2)

Сделал анализатор, который парсит входные данные и превращает их в атрибуты и объекты. А теперь вопрос, как самомодифицированный код сохранить в файл?

Эээ... А где у тебя самомодифицированный код-то?

Скорее всего ты хочешь сохранять не код, ты хочешь сохранять снимок текущего состояния Python VM, чтоб потом можно было его загрузить и продолжить работу со всеми атрибутами и объектами, которые насоздавал в рантайме в прошлый раз. Так?

Crocodoom ★★★★★
()
Последнее исправление: Crocodoom (всего исправлений: 1)
Ответ на: комментарий от Crocodoom

Автогенерация атрибутов с загруженными json данными. Т.е. парсится json ответ и создается такая фигня:

self.status_update = response["status"]["update"]

Цель: прописать raise для всех неверных ключей и данных не дроча мышкой. Благо питон позволяет так извращаться, не зря же обычно на нем СР УВЧ делают.

steemandlinux ★★★★★
() автор топика
Последнее исправление: steemandlinux (всего исправлений: 1)

Я короче наркоман.

Можно же все сбросить в текстовой файл и прогнать for i in data.

steemandlinux ★★★★★
() автор топика
Ответ на: комментарий от system-root

marshal cannot be used to serialize user-defined classes and their instances. pickle can save and restore class instances transparently, however the class definition must be importable and live in the same module as when the object was stored.

https://docs.python.org/3/library/pickle.html

Че-то мне с этой фразы начало казаться, что мы оба неправы

t184256 ★★★★★
()
Ответ на: комментарий от q13

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

system-root ★★★★★
()
Последнее исправление: system-root (всего исправлений: 1)

для обьектов pickle, для чего посложнее - marshal.

в последнем проекте применял такое решение - на этапе парсинга входных данных формируется валидный код на питоне(это позволяет встраивать во входные данные сложные конструкции на питоне и логические выражения а также сразу походу делать хитрое*ные оптимизации, которые в реальном коде обычно писать лень или они сильно портят читабельность - например фолдинг длинных цепочек вызова в плоский код без вызова функций или конверт рекурсии в стек). затем этот код компилится в CodeObject и далее уже используется через exec в нужных местах с указанием нужных глобальных переменных. а если нужно сдампить - через marshal отлично дампится и евалится. при этом оверхед на exec скомпиленного CodeObject впечатляюще ничтожный, такчто решение получилось еще и быстрым (начиная с третьего вызова перекрываем оверхед начального парсинга и выходим в ноль и далее чистый профит) - это было актуально, ибо переводить на си времени нет даже через cython, а тут получилось прям действительно быстро - всетаки цепочки вызовов сильно нагибают пытона

genryRar ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.