Я не уверен, что понимаю вариант использования, поэтому извиняюсь, если это не то, что вы ищете.
Обычно не рекомендуется использовать exec()
, потому что это может оставить непредвиденные следы в вашем глобальном пространстве имен - в вашем примере переменная open_file
будет существовать после того, как вы запустите, потому что exec()
будет работать так, как если бы вы только что запустил код в строке. Более распространенный - и более безопасный - шаблон - выполнять работу внутри функций, а затем импортировать эти функции для выполнения работы.
Если вы хотите открыть файл и сделать что-то с ним в одной функции, обычный шаблон будет иметь файл, который определит функцию, которую вы хотите запустить:
# in "do_something.py"
import maya.cmds as cmds
def process(filename):
if filename:
cmds.file(open=filename)
print "doing things in ...", filename
#real work here
else:
print "no file provided"
return
А затем импортируйте этот файл и используйте функцию для выполнения работы. Таким образом, вы получаете поток управления без каких-либо дополнительных уловок.
# in main file or the listener
import do_something
import maya.cmds
filename = pm.fileDialog2(cap='Open File',ff='Maya Files (*.ma *.mb)', dir='C:/', ds=1, fm=4 )
do_something.process(filename)
Чтобы импортировать файл, вам нужно поместить его где-нибудь в путь к Python; основы здесь