从命令行运行Blender时,以“1”退出代码终止程序

7
我正在使用自动化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。

有没有人能够给我提供一些说明或解决方案,告诉我如何用正确的退出代码退出进程呢?

非常感谢任何提示!

1个回答

7

--python-exit-code 在文档中说明,如果使用 --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)

非常感谢。我猜问题确实是我没有正确捕获异常 - 谢谢! - Madlaina Kalunder

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接