问题描述
让我们首先谈谈我正在尝试做的事情(使用 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 (将#修改为@)