user9913580
user9913580

Reputation:

.sh file works in terminal but not in python script (rclone w/ Raspberry Pi)

I'm having trouble running a .sh file in python. When I type in the location of the .sh file (/home/pi/file/script.sh) the script runs perfectly.

I'm trying to run this script in my python2 script and I've done the following methods:

subprocess.Popen(['bash', 'location of .sh'])
subprocess.call(['location of .sh'])
os.popen(['location of .sh'])

When I run the python script, I get a prompt from rclone saying "Command sync needs 2 arguments maximum"

My .sh file just includes:

#!/bin/sh
sudo /usr/local/bin/rclone -v sync /home/pi/some_project_data remote:rclone --delete-before --include *.csv --include *.py

I'm not sure how running the .sh file on terminal works fine, but this error pops up when I'm trying to run the .sh file using Python.

Upvotes: 0

Views: 279

Answers (2)

that other guy
that other guy

Reputation: 123460

Your script fails whenever you run it in a directory containing 2 or more .csv or .py files. This is true for terminals as well as via Python.

To avoid that, quote your patterns so the shell doesn't expand them:

#!/bin/sh
sudo /usr/local/bin/rclone -v sync /home/pi/some_project_data remote:rclone \
                           --delete-before --include "*.csv" --include "*.py"

Upvotes: 1

8jy89hui
8jy89hui

Reputation: 1

Please try:

os.popen('bash locationof.sh') 

ex:

os.popen('bash /home/script.sh')

That worked on my machine. If you place square brackets around the string then python assumes it is a list and popen doesnt accept a list, it accepts a single string.

If the script doesnt work, then this won't fix that, but it will at least run it. If it still doesnt work, try running the script with something like

touch z.txt

and see if z.txt appears in the file explorer. If it does, then your .sh file has a problem.

Upvotes: 0

Related Questions