2015-05-27 3 views
0

В lua есть функция, называемая loadfile, эта функция позволяет программе анализировать файл .lua в текущем проекте. Все функции и переменные работают так, как если бы они были написаны в одном файле.Python эквивалент загрузочного файла lua

Это полезно для загрузки плагинов. Я пытаюсь перенести бот телеграммы на python, но не могу найти функцию, которая позволяет мне загрузить файл .py и иметь функции в контексте файла.

Я попытался python's execfile и импортировал файл, но это не позволяет функциям загруженного файла находиться в области исходного файла.

(т.е. fileA.py нагрузки fileB.py. FiLea имеет функцию "doThis". FILEB не может получить доступ к "doThis" с помощью ExecFile)

Как я могу достичь того же в Python, как LoadFile для Lua?

Я использую Python 2

+0

наверху файла B: 'from fileA import doThis' does not работает для вас? или я недоразумение? – TehTris

+0

@TehTris Это не работает для меня, так как функция должна иметь возможность читать переменные в файлеA, как если бы они были в одном файле. Также немного утомительно нужно делать это каждый раз, когда я добавляю плагин. – JuanPotato

+0

Вы используете python 2 или 3? – TehTris

ответ

0

Вы вообще не должны делать это, так как импорт подстановочные может сделать код сложнее отлаживать, но:

from other_module import * 

Это импортирует все определенные в other_module в текущий модуля глобальное пространство имен. Это не совсем то же самое, но это как можно ближе.

execfile("other_module.py", globals()) 

очень похожи, за исключением того, что не будет кэшировать модуль в sys.modules.

+0

Я забыл упомянуть, мне нужно иметь возможность получить переменную из файлов, но каждый файл имеет переменную с именем. (плагин) Мой текущий код позволяет мне получить переменную, но все же не глобальную. 'values ​​= {}; execfile (файл, значения); plugin = values ​​['plugin'] ' Возможно, я смогу сделать обходной путь, используя ваш ответ. – JuanPotato

+0

Что вы хотите сделать в этом случае, вероятно, это 'execfile' вещь с пустым словарем,' {} '. Затем выньте из словаря один и тот же объект и поместите его в свой собственный (под именем плагина). – kindall

+0

Будет ли это работать, если бы это был массив с функцией в нем, и я создал новую функцию в файлеA, которая была равна той, что была в файлеB, позволит ли это функции использовать функции и переменные в файлеA, как если бы они были написаны в файле? – JuanPotato