20

I am calling a python script from within a shell script. The python script returns error codes in case of failures.

How do I handle these error codes in shell script and exit it when necessary?

1
  • 4
    You could put this oneliner right after your script, if you just want to exit the bash one. [ $? -ne 0 ] && exit 1; Commented Apr 3, 2019 at 12:49

3 Answers 3

35

The exit code of last command is contained in $?.

Use below pseudo code:

python myPythonScript.py
ret=$?
if [ $ret -ne 0 ]; then
     #Handle failure
     #exit if required
fi
Sign up to request clarification or add additional context in comments.

3 Comments

Don't do this. Just use if python myPythonScript.py; then ... fi or python myPythonScript.py || ...
Hmm... with my approach, you can choose different error handlers with different exit code values. e.g. you may want to ignore some trivial errors codes. Your approach however, is still technically correct for his requirement.
This simply does not work for me. Bash has $? as 0 even though my python script exits with sys.exit(1)
5

You mean the $? variable?

$ python -c 'import foobar' > /dev/null
Traceback (most recent call last):
  File "<string>", line 1, in <module>
ImportError: No module named foobar
$ echo $?
1
$ python -c 'import this' > /dev/null
$ echo $?
0

Comments

5

Please use logic below to process script execution result:

python myPythonScript.py
# $? =  is the exit status of the most recently-executed command; by convention, 0 means success and anything else indicates failure. 
if [ $? -eq 0 ]
then
  echo "Successfully executed script"
else
  # Redirect stdout from echo command to stderr.
  echo "Script exited with error." >&2
fi

2 Comments

is it possible to wait for python script to complete before executing shell commands after that
the if on line 3 will be tested after script completes execution, but it's still depends on script which you have it may spin of worker and exit with positive status, you can try to create separate question for that with script attached.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.