Я писал простой код python на днях, используя 3D-слайсер (v4.11) и Python (v3.6.7) на Windows 10.
Исходный код ниже:
def RunCLI(self, module, params, onCompletedHandler):
cliNode = slicer.cli.run(module, None, params)
mask = cliNode.Cancelled | cliNode.Completed
completed = False
def OnStatusModified(caller, event):
nonlocal completed
if completed: return # Error
status = cliNode.GetStatus() # Gives the same error for 'cliNode' if I comment the previuos line
if status & mask != 0:
completed = True
onCompletedHandler()
cliNode.AddObserver('ModifiedEvent', OnStatusModified)
OnStatusModified(None, None)
Иногда он выдает ошибку:
'NameError: свободная переменная' завершена ', на которую ссылается перед присваиванием в пределах объема ".
Понятия не имею, почему это происходит и почему иногда это проходит, а иногда и не удается.
Я не уверен, что является внутренней реализацией cliNode
(я не думаю, что это имеет значение ) но я предполагаю, что cliNode
запускает исполняемый файл в другом потоке и сигнализирует об изменении статуса через 'ModifiedEvent'.
Благодарим вас за помощь.