我正在尝试为Blender 2.73创建一个自动构建系统,该系统读取包含大量路径的XML文件,逐个打开文件然后呈现它们。
我正在使用以下代码打开:
bpy.ops.wm.open_mainfile("file_path")
我的问题是我收到以下错误:
Traceback (most recent call last):
File "<blender_console>", line 1, in <module>
File "<BLENDER_PATH>/scripts/modules/bpy/ops.py", line 186, in __call__
ret = op_call(self.idname_py(), C_dict, kw, C_exec, C_undo)
TypeError: Calling operator "bpy.ops.wm.open_mainfile" error, expected a string enum in ('INVOKE_DEFAULT', 'INVOKE_REGION_WIN', 'INVOKE_REGION_CHANNELS', 'INVOKE_REGION_PREVIEW', 'INVOKE_AREA', 'INVOKE_SCREEN', 'EXEC_DEFAULT', 'EXEC_REGION_WIN', 'EXEC_REGION_CHANNELS', 'EXEC_REGION_PREVIE)
答案 0 :(得分:13)
您的操作员调用的问题是它不接受位置参数,您需要命名每个参数 -
bpy.ops.wm.open_mainfile(filepath="file_path")
Blender一次只允许一个打开的文件,当你打开另一个混合文件时,现有数据会从ram中刷出,这通常包括你正在运行的脚本。
如果你看一下bpy.app.handlers,你可以设置一个持久的处理程序,因为它在加载一个新的混合文件后会保留在内存中。这可以允许您在打开新的混合文件后运行代码。
import bpy
from bpy.app.handlers import persistent
@persistent
def load_handler(dummy):
print("Load Handler:", bpy.data.filepath)
bpy.app.handlers.load_post.append(load_handler)
您可能还想考虑在blender之外做主要工作,遍历每个文件并告诉blender open and render each file。
blender --background thefile.blend -a
将根据混合文件中的设置渲染动画。
要获得更多控制,您还可以指定在打开混合文件后运行的python脚本。 This question可以为您扩展。