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

时间:2018-09-19 20:30:54

标签: python command-line scripting blender

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

我需要怎么做才能将参数传递给脚本并使之正常工作?

2 个答案:

答案 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的响应所述。