Blender完全加载后如何自动执行python脚本?
语境
我的脚本基于种子生成场景。我想创建几千张图像,但由于 Blender 在一百代左右后泄漏内存,所以一切都变得明显变慢并最终崩溃。我想通过每个会话只创建 x 个图像并在每次会话后完全重新启动 Blender 来缓解这个问题。
问题
如果我手动加载混合文件并单击脚本编辑器中的播放按钮,一切都会按预期工作。当我在启动后尝试调用脚本时,它在add_curve_spirals.py
第 184 行崩溃,因为context.space_data
is None
.
由于手动启动脚本工作正常,问题在于 Blender 处于某种错误状态。使用或不使用 GUI ( --background
) 启动它都不会影响这一点。
失败的解决方案
blender myfile.blend --python myscript.py
在上下文完全准备好之前执行脚本,从而产生错误。- 使用处理程序延迟执行 (
bpy.app.handlers.load_post
) 在完全加载文件后调用我的脚本,但上下文仍未准备好并产生错误。 - 将 Blender 中的脚本设置为在启动时自动执行(文本/寄存器)也会产生错误。
- 按照此处的建议,使用套接字稍后将命令发送到 Blender。等待传入命令的服务器脚本会在启动期间阻止 Blender 并阻止它完全加载,因此效果与直接执行脚本相同。
- 使用定时事件 (
bpy.app.timers.register(render_fun, first_interval=10)
.
这些都是我发现的自动执行脚本的所有方法。在每种情况下,脚本似乎都执行得太早/处于错误状态,并且都以相同的方式失败。
我想强调脚本不是这里的问题。即使我可以解决特定的行,也可能会出现许多类似的问题,我不想重写我的整个脚本。那么在正确状态下自动调用它的最佳方法是什么?