我有一个脚本要在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
我需要怎么做才能将参数传递给脚本并使之正常工作?
答案 0 :(得分:2)
您看到此错误,因为脚本正在寻找环境变量BLENDER_ENV
,该变量不在您的系统上。我不认为BLENDER_ENV
是标准的Blender相关环境变量,因此您的朋友很可能在他或她的环境中添加了BLENDER_ENV
。
答案 1 :(得分:1)
首先,blender按照给定的顺序处理其cli args,因此您的示例将在后台开始,运行脚本,然后设置input_dir ...这很可能不会得到您想要的结果之后。
脚本失败的问题是传递给os.getenv()
的arg必须是一个字符串,它是shell环境变量的名称,如果您使用的是bash,则需要导出该变量以将其放入启动搅拌器之前的环境。
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的响应所述。