【问题标题】:Terminate Blender with Exit Code "1" when run from command line从命令行运行时使用退出代码“1”终止 Blender
【发布时间】:2016-04-27 16:38:55
【问题描述】:

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

问题似乎是即使python脚本失败,blender的退出代码也总是0。

以下脚本肯定会产生非零退出代码,但搅拌机将退出代码设置为 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 blender


    【解决方案1】:

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

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

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

    【讨论】:

    • 非常感谢。我想问题真的是我没有正确捕捉到异常 - 谢谢!
    猜你喜欢
    • 1970-01-01
    • 2020-06-18
    • 2014-06-14
    • 2011-06-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-30
    相关资源
    最近更新 更多