Я поддерживаю хранимые процедуры ( MySQL имеет поддержку хранимых процедур с 5.0 ) с точки зрения безопасности - преимущества -
Недостатки -
Вы, как просто предполагается, читаете файл и должностное лицо код сами. 2to3 текущие замены
execfile("somefile.py", global_vars, local_vars)
как
with open("somefile.py") as f:
code = compile(f.read(), "somefile.py", 'exec')
exec(code, global_vars, local_vars)
(Вызов компиляции не строго необходим, но он связывает имя файла с объектом кода, делающим отладку немного легче.)
См.:
Вы могли записать свою собственную функцию:
def xfile(afile, globalz=None, localz=None):
with open(afile, "r") as fh:
exec(fh.read(), globalz, localz)
, Если Вы действительно должны были...
Если сценарий, который Вы хотите загрузить, находится в том же каталоге, чем тот, Вы выполняете, возможно, "импортируете", сделает задание?
, Если необходимо динамично импортировать, кодируют встроенную функцию __ импорт __ и модуль , на импорт стоит посмотреть.
>>> import sys
>>> sys.path = ['/path/to/script'] + sys.path
>>> __import__('test')
<module 'test' from '/path/to/script/test.pyc'>
>>> __import__('test').run()
'Hello world!'
test.py:
def run():
return "Hello world!"
при использовании Python 3.1 или позже необходимо также смотреть на importlib.
Этот вариант лучше, поскольку он берет глобальные и локальные переменные от вызывающего:
import sys
def execfile(filename, globals=None, locals=None):
if globals is None:
globals = sys._getframe(1).f_globals
if locals is None:
locals = sys._getframe(1).f_locals
with open(filename, "r") as fh:
exec(fh.read()+"\n", globals, locals)