Скрипт не может сохранить данные в файл - PullRequest
0 голосов
/ 21 июня 2019

На основе файла * .blend мне нужно написать скрипт, который получает информацию об объектах и ​​сохраняет их в json.Этот скрипт можно открыть в Blender или запустить.Запуск должен сохранить файл json с данными в текущем каталоге.

Итак, я создал это:

   import bpy
   import json

   objects = bpy.context.scene.objects
   data = {}

   for ob in objects:
       item = {}
       item['location'] = ob.location
       if ob.name == 'Cube':
           item['material_name'] = ob.active_material.name
           data[ob.name] = item
       elif ob.name == 'Camera':
           item['camera_type'] = ob.data.type
           data[ob.name] = item
       elif ob.name == 'Lamp':
           item['lamp_type'] = ob.data.type
           data[ob.name] = item

   with open('scene_objects.json', 'w') as json_file:
       json.dump(data, json_file)

Однако, когда я запускаю скрипт в Blender, я получил следующую ошибку:

PermissionError: [Errno 13] Permission denied: 'scene_objects.json'   

Я новичок в использовании Blender, поэтому, возможно, невозможно записать в файл из Blender?Однако, если я могу это сделать, я прошу совета о том, как?

1 Ответ

0 голосов
/ 23 июня 2019

Ваша проблема не с Blender, ОС препятствует созданию (или возможности записи) файла на основе разрешений файловой системы.

Линия -

with open('scene_objects.json', 'w') as json_file:

создаст новый файл (или откроет существующий) в текущем рабочем каталоге . При запуске Blender это может быть один из нескольких вариантов, в зависимости от того, какую ОС вы используете. Также возможно, что запуск блендера из графического интерфейса пользователя может оставить вас без действительного CWD или временного каталога, на который у пользователя нет прав на запись.

Вы можете использовать os.chdir(), чтобы изменить CWD на тот, который, как вы знаете, существует и в который вы можете писать. Вы также можете указать полный путь, а не просто имя файла.

...