Search code examples
pythonbashterminalos.system

Bash script executed within Python with os.systems returns 0 but does not execute/ write


I have a bash script that I can run flawlessly in my Rpi terminal in its folder:

./veye_mipi_i2c.sh -r -f mirrormode -b 10

it works like this: Usage: ./veye_mipi_i2c.sh [-r/w] [-f] function name -p1 param1 -p2 param2 -b bus

options:

-r read

-w write

-f [function name] function name

-p1 [param1] param1 of each function

-p2 [param1] param2 of each function

-b [i2c bus num] i2c bus number

When I try to run it in Python (2) via my Spyder editor with os.system, I get a "0" return which I interpret as "succesfully executed" but in fact the script has not been executed and the functions have not been performed. I know this because the script is suppose to change the camera functioning and by checking the images I take afterwards, I can see that nothing has changed.

import os
status = os.system('/home/pi/VeyeMipi/Camera_Folder/veye_mipi_i2c.sh -w -f mirrormode -p1 0x04 -b 10')
print status

Any idea, what causes this? The bash script uses two other scripts that lie in the same folder location (read and write). Could it be, that it cannot execute these additional scripts when startet through Python? It does not make sense to me, but so do a lot of things....

Many thanks


Solution

  • It would help if you fix your scripts so they don't depend on the current working directory (that's a very bad practice).

    In the meantime, running

    import subprocess
    p = subprocess.run(['./veye_mipi_i2c.sh', '-r', '-f', 'mirrormode', '-b', '10'], cwd='/home/pi/VeyeMipi/Camera_Folder')
    print(p.returncode)
    

    which changes the directory would help.