从命令行运行时,使用退出代码"1"终止Blender

Mad*_*der 7 python blender

我正在使用自动Blender python脚本,我想知道如何在发生异常时使用退出代码1终止它.

问题似乎是即使python脚本失败,来自blender的退出代码也始终为0.

以下脚本肯定会生成非零退出代码,但是blender会将退出代码设置为0

def main():
    raise Exception("Fail")
    sys.exit(1)
Run Code Online (Sandbox Code Playgroud)

我也尝试了--python-exit-code命令行参数,但没有效果:

C:\blender.exe --python-exit-code 2 --disable-abort-handler -P bake.py
Run Code Online (Sandbox Code Playgroud)

这给出了稍好的结果,因为我得到以下消息:

Error: script failed, file: 'bake.py', exiting with code 2.
Run Code Online (Sandbox Code Playgroud)

不幸的是退出代码仍为0.

任何人都可以通过一些解释或解决方案来启发我如何使用正确的退出代码退出流程?

非常感谢任何提示!

qwa*_*zix 5

--python-exit-code如文档中所述,如果调用 with 的命令行脚本--python引发异常,则设置退出代码,而不是在以非零代码退出时。

如果引发 Python 异常(仅适用于从命令行执行的脚本),则将 [0..255] 中的退出代码设置为退出,零禁用。

因此,唯一的解决方案是进行检查,并手动引发异常,然后捕获它并在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)
Run Code Online (Sandbox Code Playgroud)