Running bash script from within python
Running bash script from within python
Making sleep.sh executable and adding shell=True
to the parameter list (as suggested in previous answers) works ok. Depending on the search path, you may also need to add ./
or some other appropriate path. (Ie, change sleep.sh
to ./sleep.sh
.)
The shell=True
parameter is not needed (under a Posix system like Linux) if the first line of the bash script is a path to a shell; for example, #!/bin/bash
.
If sleep.sh
has the shebang #!/bin/sh
and it has appropriate file permissions — run chmod u+rx sleep.sh
to make sure and it is in $PATH
then your code should work as is:
import subprocess
rc = subprocess.call(sleep.sh)
If the script is not in the PATH then specify the full path to it e.g., if it is in the current working directory:
from subprocess import call
rc = call(./sleep.sh)
If the script has no shebang then you need to specify shell=True
:
rc = call(./sleep.sh, shell=True)
If the script has no executable permissions and you cant change it e.g., by running os.chmod(sleep.sh, 0o755)
then you could read the script as a text file and pass the string to subprocess
module instead:
with open(sleep.sh, rb) as file:
script = file.read()
rc = call(script, shell=True)
Running bash script from within python
Actually, you just have to add the shell=True
argument:
subprocess.call(sleep.sh, shell=True)
But beware –
Warning Invoking the system shell with shell=True can be a security hazard if combined with untrusted input. See the warning under Frequently Used Arguments for details.