如何 运行 一个 python 脚本与 blender 进行参数?
How to run a python script taking arguments with 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
如果我 运行 这个相同的脚本没有搅拌器(但有参数)它告诉我:
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_ENV
,该变量不在您的系统中。我不认为 BLENDER_ENV
是标准的 Blender 相关环境变量,因此您的朋友可能将 BLENDER_ENV
添加到他或她的环境中。
首先,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 的回应所述。
我有一个脚本,我想在 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
我需要做什么才能将参数传递给脚本并使其正常运行?
您看到该错误是因为您的脚本正在查找环境变量 BLENDER_ENV
,该变量不在您的系统中。我不认为 BLENDER_ENV
是标准的 Blender 相关环境变量,因此您的朋友可能将 BLENDER_ENV
添加到他或她的环境中。
首先,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 的回应所述。