Уведомления

Группа в Telegram: @pythonsu

#1 Фев. 26, 2013 12:17:39

alexeyvanzhula
Зарегистрирован: 2012-05-14
Сообщения: 34
Репутация: +  0  -
Профиль   Отправить e-mail  

Аналог execfile для исполнения не из файла

Хочу необычного.
Функция execfile исполняет последовательно команды из файла на диске.
Меня интересует аналог данной функции но без участия файла.
Все содержимое файла храниться в str-переменной (вместо файла). Хочется как-бы скормить функции execfile не сам файл, а его содержимое в переменной.
Прошу вопросы “Зачем?” не задавать - мне просто нада. Есть ли аналоги подобного.
Если бы содержимое было без циклов\if-ов\классов и т.д. то можно былобы пройтись по переменной в цикле и отправлять все функции exec - но мне нада исполнить полноценный питоновский скрипт.
Помогите.

Отредактировано alexeyvanzhula (Фев. 26, 2013 12:19:41)

Офлайн

#2 Фев. 26, 2013 14:06:42

cutwater
От:
Зарегистрирован: 2009-01-08
Сообщения: 444
Репутация: +  19  -
Профиль   Отправить e-mail  

Аналог execfile для исполнения не из файла

exec это не eval
собственно exec Вам и нужен.

Однако все таки задайте себе вопрос зачем? В подавляющем большинстве случаев ни exec ни execfile не нужны.



Отредактировано cutwater (Фев. 26, 2013 14:07:57)

Офлайн

#3 Фев. 26, 2013 14:35:24

alexeyvanzhula
Зарегистрирован: 2012-05-14
Сообщения: 34
Репутация: +  0  -
Профиль   Отправить e-mail  

Аналог execfile для исполнения не из файла

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 не нужны
Иногда бывают необычные ситуации. У меня это сделано в целях конфиденциальности. Нужно скрипт передать из одного питона другому по определенному порту, не используя при этом файловую систему. Но это уже другая история…

Отредактировано alexeyvanzhula (Фев. 26, 2013 14:36:17)

Офлайн

#4 Фев. 26, 2013 14:44:41

sp3
От:
Зарегистрирован: 2010-01-12
Сообщения: 405
Репутация: +  18  -
Профиль   Отправить e-mail  

Аналог execfile для исполнения не из файла

>>> string='for a in range(10):\n  print a'
>>> exec string
0
1
2
3
4
5
6
7
8
9
>>>
exec == зло



Офлайн

#5 Фев. 26, 2013 15:45:03

alexeyvanzhula
Зарегистрирован: 2012-05-14
Сообщения: 34
Репутация: +  0  -
Профиль   Отправить e-mail  

Аналог execfile для исполнения не из файла

sp3
О! Не знал\Туплю. Я был уверен что оно только для однострочного исполнения. Премного благодарен!

Офлайн

#6 Фев. 26, 2013 16:51:24

alexeyvanzhula
Зарегистрирован: 2012-05-14
Сообщения: 34
Репутация: +  0  -
Профиль   Отправить e-mail  

Аналог execfile для исполнения не из файла

Вот было-бы вообще круто если бы такое можно было проделать с инструкцией import (импортировать не из файла)

Офлайн

#7 Фев. 26, 2013 17:04:23

cutwater
От:
Зарегистрирован: 2009-01-08
Сообщения: 444
Репутация: +  19  -
Профиль   Отправить e-mail  

Аналог execfile для исполнения не из файла

alexeyvanzhula
Вот было-бы вообще круто если бы такое можно было проделать с инструкцией import (импортировать не из файла)

Кто мешает? Смотрите в importlib.



Отредактировано cutwater (Фев. 26, 2013 17:06:08)

Офлайн

#8 Фев. 26, 2013 17:34:51

alexeyvanzhula
Зарегистрирован: 2012-05-14
Сообщения: 34
Репутация: +  0  -
Профиль   Отправить e-mail  

Аналог execfile для исполнения не из файла

Это модуль из 3.х. Не знаю как там в 3.х, но я использую 2.6, а в нем - в модуле importlib только одна функция import_module, которой, в качестве аргумента, можно передавать имя файла. Это мне не нужно. Если я туплю поправте

Офлайн

#9 Фев. 26, 2013 18:14:49

cutwater
От:
Зарегистрирован: 2009-01-08
Сообщения: 444
Репутация: +  19  -
Профиль   Отправить e-mail  

Аналог execfile для исполнения не из файла

Есть еще imp, через который теоретически можно создать модуль, прописать в sys.modules…



Офлайн

#10 Фев. 26, 2013 18:20:37

alexeyvanzhula
Зарегистрирован: 2012-05-14
Сообщения: 34
Репутация: +  0  -
Профиль   Отправить e-mail  

Аналог execfile для исполнения не из файла

cutwater
Есть еще imp, через который теоретически можно создать модуль, прописать в sys.modules…

О, это уже ближе. Буду копать. Спасибо.

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version