Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Terminate Blender with Exit Code "1" when run from command line

Tags:

python

blender

I am working with an automated Blender python script and I would like to know how to terminate it with an Exit Code 1 when an Exception occurs.

The problem seems to be that the exit code from blender is always 0 even if the python script fails.

The following script definately produces a non-zero exit code, but blender sets exit code to 0

def main():
    raise Exception("Fail")
    sys.exit(1)

I also tried the --python-exit-code command line argument but to no effect:

C:\blender.exe --python-exit-code 2 --disable-abort-handler -P bake.py

this gives a slightly better result, because I get the following message:

Error: script failed, file: 'bake.py', exiting with code 2.

Unfortunately the exit code is still 0.

Can anyone enlighten me with some explanations or solutions on how I can exit the process with the correct exit code?

Thanks a lot for any hints!

like image 538
Madlaina Kalunder Avatar asked Jan 21 '16 12:01

Madlaina Kalunder


People also ask

How do I stop a script from running in blender?

If you want to stop the script click on the python console and press control-C.

How do I open the Python console in blender?

Accessing Built-in Python ConsoleBy pressing Shift-F4 in any Blender Editor type (3D View, Timeline etc.,) you can change it to a Console Editor. From the screenshot above, you will notice that apart from the usual hot keys that are used to navigate, by pressing Ctrl-Spacebar you can enable Auto-complete feature.


1 Answers

--python-exit-code as stated in the documentation sets the exit code if the command line script called with --python raises an exception, not when it exits with a non-zero 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.

Thus the only solution is to do your checking, and raise an exception manually, then catch it and exit in the except block. (If you don't exit right away, the exit code reverts to 0.

This code worked for me when doing unit tests inside a blender addon.

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)
like image 137
qwazix Avatar answered Oct 23 '22 04:10

qwazix