无法在搅拌器的同一实例中加载连续的.blend文件

时间:2018-12-04 13:25:50

标签: blender

所以我正在研究一个脚本,该脚本从目录中加载一些混合文件并处理每个文件。但是,由于某种原因,在处理完第一个文件混合器之后,它只会退出,而不会处理其他文件。 我的主文件如下:

import os
import sys
import argparse
import utils
import bpy

def get_blend_files(dirpath):
    blend_files = filter(lambda x: x.endswith('.blend'), os.listdir(dirpath))
    blend_files = [os.path.join(dirpath, file) for file in blend_files]
    return blend_files

def parse_args(parser):
    argv = sys.argv
    _tmp_args = parser.parse_known_args(argv)[0]
    argv = argv[argv.index('--') + 1:]
    if _tmp_args.background:
        argv.append('-b')
    return parser.parse_args(argv)

if __name__=='__main__':
    # Parse arguments
    parser = argparse.ArgumentParser()
    parser.add_argument('-b', '--background', action='store_true', help='Run in background mode')
    parser.add_argument('-src', '--source', type=str, help='Blend source directory')
    args = parse_args(parser)

    # Load blender filepaths
    blend_files = get_blend_files(args.source)

    # Open test script in blender text editor
    bpy.ops.text.open(filepath=os.path.join(dir_name, 'test.py'))
    test_script = bpy.data.texts['test.py']

    # Run the test script for each .blend file in the directory
    for i, filepath in enumerate(blend_files):
        sys.argv = [i, filepath]
        exec(test_script.as_string())
    bpy.ops.wm.quit_blender()

测试文件如下:

import sys
import os
import bpy

if __name__=='__main__':
    path = sys.argv[1]
    if os.path.exists(path):
        print('blendfile ' + str(sys.argv[0]), 'ran')
        bpy.ops.wm.open_mainfile(filepath=path)

要运行此命令,我只使用blender --python main.py -- -src [blend_directory_path]。如果我注释掉open_mainfile命令,则打印语句将为目录中的每个混合文件打印。但是,如果它在那里,那么我只会得到打开的第一个文件的打印文件

0 个答案:

没有答案