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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何运行带有blender参数的python脚本?相关的知识,希望对你有一定的参考价值。

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

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

答案

首先,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所述。

另一答案

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

以上是关于如何运行带有blender参数的python脚本?的主要内容,如果未能解决你的问题,请参考以下文章

如果在后台执行脚本,如何在 Blender Python 上使用旋转运算符?

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

如何在 python 3 解释器中运行带有参数的 python 脚本?

在 Blender 脚本中测量路径长度?

Python:子进程并运行带有多个参数的bash脚本

Blender 的 Python 脚本:获取渲染信息