Итак, я работаю над сценарием, который загружает некоторые смешанные файлы из каталога и обрабатывает каждый из них.Однако по какой-то причине после обработки первый файловый блендер просто завершает работу и не обрабатывает другие файлы.Мой основной файл выглядит так:
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
, оператор print печатает для каждого смешанного файла в каталоге.Однако, если его там, то я просто получаю распечатку только для первого открытого файла