所以我正在研究一个脚本,该脚本从目录中加载一些混合文件并处理每个文件。但是,由于某种原因,在处理完第一个文件混合器之后,它只会退出,而不会处理其他文件。 我的主文件如下:
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
命令,则打印语句将为目录中的每个混合文件打印。但是,如果它在那里,那么我只会得到打开的第一个文件的打印文件