Как я могу остановить «для цикла» в файле «run_script», когда «file_a» не открывает файл - PullRequest
0 голосов
/ 15 мая 2019

Я работаю над «сценарием python» в «MAYA», когда я использую «pm.fileDialog2» и когда я нажимаю кнопку выхода, сценарий цикла все еще работает, я хочу, когда я открываю файл и нажимаюкнопка закрытия "для цикла" останавливается.Спасибо за помощь

это скрипт pyside и pymel в "MAYA"

#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 голосов
/ 16 мая 2019

Я не уверен, что понимаю вариант использования, поэтому извиняюсь, если это не то, что вы ищете.

Обычно не рекомендуется использовать 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; основы здесь

...