I am writing a Python Script handling the exit codes of different shell scripts.
When i call the shell script via command prompt and ask for the exit code with echo $?, I get a 1.
When I call the shell script via the python script, I assume the value will be 1, but instead it turns out to be 256.
What happened?
This is my shell Script for testing a Camera:
#!/bin/bash
#cam.sh
if [ -r /dev/video0 ]
then
#taking a picture
ffmpeg -f video4linux2 -s 640x480 -i /dev/dev0 -ss 0:0:2 -frames 1 ~/Desktop/testbild.jpg 2>/dev/null
#showing a stream
timeout 10s vlc v4l2:///dev/video0 --no-audio --no-video-title-show
exit 0
else
exit 1
fi
And my Python call:
#!/usr/bin/env python
#exitcodetest.py
import os
command = "sh ~/Desktop/cam.sh"
camera = os.system(command)
print(camera)
Why?
Because os.system doesn't return exitcode but waitstatus. To convert it to return code you need to use os.waitstatus_to_exitcode (or os.WEXITSTATUS for older Python versions).
In [2]: os.WEXITSTATUS(256)
Out[2]: 1
See python documentation for os.waitstatus_to_exitcode and os.system for more details. And also man system and man waipid for more details on wait status.
Also if you need some more "user friendly" way of running commands/programs from Python, I recommend using the subprocess module.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With