当从命令行 运行 时使用退出代码“1”终止 Blender
Terminate Blender with Exit Code "1" when run from command line
我正在使用自动 Blender python 脚本,我想知道如何在发生异常时使用退出代码 1 终止它。
问题似乎是 blender 的退出代码始终为 0,即使 python 脚本失败也是如此。
以下脚本肯定会生成非零退出代码,但 blender 将退出代码设置为 0
def main():
raise Exception("Fail")
sys.exit(1)
我也尝试了 --python-exit-code 命令行参数但没有效果:
C:\blender.exe --python-exit-code 2 --disable-abort-handler -P bake.py
这给出了稍微好一点的结果,因为我收到以下消息:
Error: script failed, file: 'bake.py', exiting with code 2.
不幸的是,退出代码仍然是 0。
谁能给我一些解释或解决方案,告诉我如何使用正确的退出代码退出进程?
非常感谢任何提示!
如果使用 --python
调用的命令行脚本引发异常,而不是当它以非零代码退出时,--python-exit-code
如文档中所述设置退出代码。
Set the exit-code in [0..255] to exit if a Python exception is raised (only for scripts executed from the command line), zero disables.
因此唯一的解决方案是进行检查,手动引发异常,然后捕获它并在 except
块中退出。 (如果您不立即退出,退出代码将恢复为 0。
在 blender 插件中进行单元测试时,这段代码对我有用。
import unittest
from tests.my_test import MyTest
import sys
def run():
suite = unittest.defaultTestLoader.loadTestsFromTestCase(MyTest)
success = unittest.TextTestRunner().run(suite).wasSuccessful()
if not success:
raise Exception('Tests Failed')
try:
run()
except Exception:
sys.exit(1)
我正在使用自动 Blender python 脚本,我想知道如何在发生异常时使用退出代码 1 终止它。
问题似乎是 blender 的退出代码始终为 0,即使 python 脚本失败也是如此。
以下脚本肯定会生成非零退出代码,但 blender 将退出代码设置为 0
def main():
raise Exception("Fail")
sys.exit(1)
我也尝试了 --python-exit-code 命令行参数但没有效果:
C:\blender.exe --python-exit-code 2 --disable-abort-handler -P bake.py
这给出了稍微好一点的结果,因为我收到以下消息:
Error: script failed, file: 'bake.py', exiting with code 2.
不幸的是,退出代码仍然是 0。
谁能给我一些解释或解决方案,告诉我如何使用正确的退出代码退出进程?
非常感谢任何提示!
--python
调用的命令行脚本引发异常,而不是当它以非零代码退出时,--python-exit-code
如文档中所述设置退出代码。
Set the exit-code in [0..255] to exit if a Python exception is raised (only for scripts executed from the command line), zero disables.
因此唯一的解决方案是进行检查,手动引发异常,然后捕获它并在 except
块中退出。 (如果您不立即退出,退出代码将恢复为 0。
在 blender 插件中进行单元测试时,这段代码对我有用。
import unittest
from tests.my_test import MyTest
import sys
def run():
suite = unittest.defaultTestLoader.loadTestsFromTestCase(MyTest)
success = unittest.TextTestRunner().run(suite).wasSuccessful()
if not success:
raise Exception('Tests Failed')
try:
run()
except Exception:
sys.exit(1)