当“ file_a”未打开文件时,如何停止“ run_script”文件中的“ for循环”

时间:2019-05-15 17:58:26

标签: python pyside maya pymel

我正在“ MAYA”中的“ python脚本”上工作,当我使用“ pm.fileDialog2”并且单击退出按钮时,循环脚本仍在运行,我想在打开文件并单击时关闭按钮“ for loop”停止。谢谢您的帮助

这是“ MAYA”中的pyside和pymel脚本

#file: run_script
_runScript(scripts=['file_a.py', 'file_b.py'])
def _runScript(scripts=[]):
    if len(scripts):
        for script in scripts:
            exec(open(script).read(), globals())

#file: file_a
open_file = pm.fileDialog2(cap='Open File',ff='Maya Files (*.ma *.mb)', dir='C:/', ds=1, fm=4 )
if open_file:
    print('Open File')
else:
    print('Not Open')

#file: file_b
print('this is file_b')

1 个答案:

答案 0 :(得分:0)

我不确定我是否了解用例,因此,如果这不是您要查找的内容,则深表歉意。

使用exec()通常不是一个好主意,因为它可能会在全局命名空间中留下无法预见的痕迹-在您的示例中,open_file变量在您运行后将存在,因为{{1} }的运行方式就好像您只是在直接运行代码一样。更常见且更安全的模式是在功能内部进行工作,然后导入这些功能以进行工作。

如果您要打开一个文件并在单个函数中执行某些操作,通常的模式是拥有一个文件,该文件定义了要运行的函数:

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

要导入文件,您需要将其放在python路径中的某个位置;基础是here