Handling exit code returned by python in shell script

35,108

Solution 1

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

Solution 2

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

Solution 3

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
Share:
35,108
SpikETidE
Author by

SpikETidE

Updated on July 09, 2022

Comments

  • SpikETidE
    SpikETidE almost 2 years

    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?

  • Josh Cartwright
    Josh Cartwright over 11 years
    Don't do this. Just use if python myPythonScript.py; then ... fi or python myPythonScript.py || ...
  • anishsane
    anishsane over 11 years
    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.
  • SpikETidE
    SpikETidE over 11 years
    This is exactly what I needed. Thanks, anishane.
  • tadasajon
    tadasajon almost 7 years
    This simply does not work for me. Bash has $? as 0 even though my python script exits with sys.exit(1)
  • Punit
    Punit about 4 years
    is it possible to wait for python script to complete before executing shell commands after that
  • Andriy Ivaneyko
    Andriy Ivaneyko about 4 years
    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.