我正在使用自动Blender python脚本,我想知道如何在发生异常时使用退出代码1终止它。
问题似乎是即使python脚本失败,来自blender的退出代码也始终为0。
以下脚本肯定会产生非零退出代码,但是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.
任何人都可以通过一些解释或解决方案来告诉我如何使用正确的退出代码退出流程吗?
非常感谢任何提示!
答案 0 :(得分:4)
--python-exit-code
调用的命令行脚本引发异常,而不是以非零代码退出时,文档中所述的 --python
设置退出代码。
如果引发Python异常(仅针对从命令行执行的脚本),则将[0..255]中的退出代码设置为退出,禁用零。
因此,唯一的解决方案是进行检查,手动引发异常,然后捕获它并退出except
块。 (如果您不立即退出,退出代码将恢复为0。
在混合器插件中进行单元测试时,此代码对我有用。
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)