使用外部 CMD 启动程序,检测何时关闭

问题描述

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

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

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

要求 3:一旦 Blender 启动,工具本身应该隐藏,如果 Blender 关闭,应该会回来。 (这是为了在发生崩溃时可以快速重新启动。一旦您处理较重的场景,许多 VFX 软件就会非常不稳定。)

我个人能够满足每个要求。我什至可以同时涵盖 2 个不同的,但我很难同时满足所有 3 个。 (我使用 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 运行时冻结工具。一旦 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 之前控制台将是可见的。

PS:抱歉,如果有任何内容混乱或过于复杂。我是 VFX 艺术家而不是程序员,我偶尔只使用 python。我觉得我的知识很不平衡。它在某些主题上相当先进,但在其他主题上差距很大。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...