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
Author by
SpikETidE
Updated on July 09, 2022Comments
-
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 over 11 yearsDon't do this. Just use
if python myPythonScript.py; then ... fi
orpython myPythonScript.py || ...
-
anishsane over 11 yearsHmm... 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 over 11 yearsThis is exactly what I needed. Thanks, anishane.
-
tadasajon almost 7 yearsThis simply does not work for me. Bash has
$?
as 0 even though my python script exits withsys.exit(1)
-
Punit about 4 yearsis it possible to wait for python script to complete before executing shell commands after that
-
Andriy Ivaneyko about 4 yearsthe 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.