alexeyvanzhula
Фев. 26, 2013 12:17:39
Хочу необычного.
Функция execfile исполняет последовательно команды из файла на диске.
Меня интересует аналог данной функции но без участия файла.
Все содержимое файла храниться в str-переменной (вместо файла). Хочется как-бы скормить функции execfile не сам файл, а его содержимое в переменной.
Прошу вопросы “Зачем?” не задавать - мне просто нада. Есть ли аналоги подобного.
Если бы содержимое было без циклов\if-ов\классов и т.д. то можно былобы пройтись по переменной в цикле и отправлять все функции exec - но мне нада исполнить полноценный питоновский скрипт.
Помогите.
cutwater
Фев. 26, 2013 14:06:42
exec это не eval
собственно exec Вам и нужен.
Однако все таки задайте себе вопрос зачем? В подавляющем большинстве случаев ни exec ни execfile не нужны.
alexeyvanzhula
Фев. 26, 2013 14:35:24
exec это не eval
собственно exec Вам и нужен.
Не сработает. К примеру:
string='for a in range(10):\n print a'
for line in string:
exec( line )
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<string>", line 1
for a in range(10):
SyntaxError: unexpected EOF while parsing
Однако все таки задайте себе вопрос зачем? В подавляющем большинстве случаев ни exec ни execfile не нужны
Иногда бывают необычные ситуации. У меня это сделано в целях конфиденциальности. Нужно скрипт передать из одного питона другому по определенному порту, не используя при этом файловую систему. Но это уже другая история…
sp3
Фев. 26, 2013 14:44:41
>>> string='for a in range(10):\n print a'
>>> exec string
0
1
2
3
4
5
6
7
8
9
>>>
exec == зло
alexeyvanzhula
Фев. 26, 2013 15:45:03
sp3
О! Не знал\Туплю. Я был уверен что оно только для однострочного исполнения. Премного благодарен!
alexeyvanzhula
Фев. 26, 2013 16:51:24
Вот было-бы вообще круто если бы такое можно было проделать с инструкцией import (импортировать не из файла)
cutwater
Фев. 26, 2013 17:04:23
alexeyvanzhula
Вот было-бы вообще круто если бы такое можно было проделать с инструкцией import (импортировать не из файла)
Кто мешает? Смотрите в importlib.
alexeyvanzhula
Фев. 26, 2013 17:34:51
Это модуль из 3.х. Не знаю как там в 3.х, но я использую 2.6, а в нем - в модуле importlib только одна функция import_module, которой, в качестве аргумента, можно передавать имя файла. Это мне не нужно. Если я туплю поправте
cutwater
Фев. 26, 2013 18:14:49
Есть еще imp, через который теоретически можно создать модуль, прописать в sys.modules…
alexeyvanzhula
Фев. 26, 2013 18:20:37
cutwater
Есть еще imp, через который теоретически можно создать модуль, прописать в sys.modules…
О, это уже ближе. Буду копать. Спасибо.