如何运行带有blender参数的python脚本?

问题描述 投票:0回答:2

我有一个脚本我想在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

如果我在没有blender的情况下运行这个相同的脚本(但是带有参数)它会告诉我:

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

如何将参数传递给脚本并使其正常工作,我需要做什么?

python command-line scripting blender
2个回答
1
投票

首先,blender按照给定的顺序处理它的cli args,所以你的例子将在后台开始,运行一个脚本,然后设置input_dir ......这很可能没有你想要的结果。

您的脚本失败的问题是传递给os.getenv()的arg需要是一个shell环境变量的名称,如果您使用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(' ')

请注意,每个shell实例都是一个单独的环境,您需要在启动blender的同一实例中设置变量。

您可能也有兴趣将cli参数传递给脚本,如响应this question所述。


2
投票

您看到该错误,因为您的脚本正在查找环境变量BLENDER_ENV,它不在您的系统上。我不承认BLENDER_ENV是一个标准的Blender相关环境变量,因此你的朋友很可能将BLENDER_ENV添加到他或她的环境中。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.