Python 使用外部命令启动程序,检测程序何时关闭

Python 使用外部命令启动程序,检测程序何时关闭,python,python-3.x,subprocess,os.system,Python,Python 3.x,Subprocess,Os.system,让我们首先谈谈我正在尝试做什么(使用Python3.x): 作为一个小型VFX管道的一部分,我正在开发一个工具,该工具应该在设置几个环境变量后启动程序(例如Blender)。这部分没有直接的问题。问题是控制台的可见性。 我发现有三个要求相互冲突 要求1:需要隐藏工具本身的控制台 要求2:需要为Blender启动一个单独的cmd/控制台,因为需要访问此工具的输出。(如果我在Blender中处理脚本,我需要能够看到错误和打印。) 要求3:搅拌机启动后,工具本身应隐藏,如果搅拌机关闭,工具应返回。(这

让我们首先谈谈我正在尝试做什么(使用Python3.x): 作为一个小型VFX管道的一部分,我正在开发一个工具,该工具应该在设置几个环境变量后启动程序(例如Blender)。这部分没有直接的问题。问题是控制台的可见性。 我发现有三个要求相互冲突

要求1:需要隐藏工具本身的控制台

要求2:需要为Blender启动一个单独的cmd/控制台,因为需要访问此工具的输出。(如果我在Blender中处理脚本,我需要能够看到错误和打印。)

要求3:搅拌机启动后,工具本身应隐藏,如果搅拌机关闭,工具应返回。(这样可以在发生崩溃时快速重启。很多VFX软件在处理较重的场景时非常不稳定。)

就个人而言,我能够满足每项要求。我甚至可以同时涵盖两个不同的项目,但我很难同时满足所有三个项目。 (我正在使用Tkinter作为UI)

选项1:

command = "C:\Program Files\Blender Foundation\Blender 2.91\blender.exe"

ui.withdraw()
os.system(command)
ui.update()
ui.deiconify()
使用os.system将在Blender运行时冻结工具。它会解冻,因此一旦搅拌机崩溃,它也会打开隐藏。但是我缺少控制台输出。(工具本身是使用subprocess.Popen启动的。这是故意的,因为我不需要工具本身的控制台,我只想在Blender实际启动后显示控制台。)

或者,我尝试:

ui.withdraw()
os.system(f'start cmd /C {command}')  # also tried the same command using subprocess.Popen
ui.update()
ui.deiconify()
启动一个控制台并从其中执行Blender可以提供所需的控制台,但该工具不再等待Blender关闭。它立即恢复可见,因为它认为启动cmd是命令的结束

我可以使用第二种方法启动工具本身,然后在其中使用第一种方法。这解决了需求3和4,但也意味着在Blender启动之前控制台将可见,不符合需求2

附言:如果有任何事情是混乱或过于复杂的,请道歉。我是一名VFX艺术家,不是程序员,我只是偶尔使用python。我觉得我的知识很不平衡。它在一些主题上相当先进,但在其他方面有很大的差距