Как запустить скрипт Python, принимая аргументы с помощью Blender? - PullRequest
0 голосов
/ 19 сентября 2018

У меня есть скрипт, который я хочу запустить в blender для генерации карт AO (мне дали скрипт, и источник гарантирует, что он работает).

Я пытаюсь запустить скрипт следующим образом:

blender --background --python /opt/ff/product_builder/furniture_builder/generate_ao_maps.py --input_dir /tmp/test.obj --output_dir /tmp/test.png --mode ao

Который выдает:

AL lib: (EE) UpdateDeviceParams: Failed to set 44100hz, got 48000hz instead
found bundled python: /usr/share/blender/2.79/python
Traceback (most recent call last):
  File "/opt/ff/product_builder/furniture_builder/generate_ao_maps.py", line 195, in <module>
    main()
  File "/opt/ff/product_builder/furniture_builder/generate_ao_maps.py", line 178, in main
    args = parse_args()
  File "/opt/ff/product_builder/furniture_builder/generate_ao_maps.py", line 21, in parse_args
    return parser.parse_args(os.getenv(BLENDER_ENV).split(' '))
AttributeError: 'NoneType' object has no attribute 'split'
Error: File format is not supported in file '/tmp/test.obj'

Blender quit

Если я запускаю этот же скрипт без блендера (но с аргументом), он говорит мне:

Traceback (most recent call last):
  File "/opt/ff/product_builder/furniture_builder/generate_ao_maps.py", line 5, in <module>
    import bpy
ImportError: No module named bpy

Что мне нужно сделатьпередать параметры в скрипт и заставить его работать?

Ответы [ 2 ]

0 голосов
/ 21 сентября 2018

Во-первых, blender обрабатывает свои cli args в том порядке, в котором они даны, поэтому ваш пример начнется в фоновом режиме, запустит скрипт, затем установит input_dir ... Скорее всего, он не будет иметьрезультат, который вы после.

Проблема с ошибкой вашего скрипта состоит в том, что аргумент, переданный в os.getenv(), должен быть строкой, которая является именем переменной среды оболочки, если вы используете bash, вам нужно экспортироватьпеременная для помещения его в среду перед запуском blender.

export BLENDER_ARGS="arg1 arg2"
blender -b myfile.blend --python myscript.py

Если вы используете csh, тогда используйте setenv BLENDER_ARGS "arg1 arg2"

Затем в вашем скрипте py вы используете os.getenv('BLENDER_ARGS').split(' ')

Обратите внимание, что каждый экземпляр оболочки является отдельной средой, вам нужно установить переменные в том же экземпляре, который запускает blender.

Возможно, вам также будет интересно передать аргументы cli в сценарий, как описанов ответ на этот вопрос .

0 голосов
/ 19 сентября 2018

Вы видите эту ошибку, потому что ваш скрипт ищет переменную окружения BLENDER_ENV, которой нет в вашей системе.Я не распознаю BLENDER_ENV в качестве стандартной переменной среды, связанной с Blender, так что, вероятно, ваш друг добавил BLENDER_ENV в свою среду.

...