How to call a shell script from python code?
The subprocess module will help you out.
Blatantly trivial example:
>>> import subprocess
>>> subprocess.call(['sh', './test.sh']) # Thanks @Jim Dennis for suggesting the []
0
>>>
Where test.sh
is a simple shell script and 0
is its return value for this run.
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
.
Shell Script: Execute a python program from within a shell script
Just make sure the python executable is in your PATH environment variable then add in your script
python path/to/the/python_script.py
Details:
- In the file job.sh, put this
#!/bin/sh
python python_script.py
- Execute this command to make the script runnable for you :
chmod u+x job.sh
- Run it :
./job.sh
Run shell script from python
You should separate arguments:
call(['bash', 'run.sh'])
call(['ls','-l'])
Should I put #! (shebang) in Python scripts, and what form should it take?
The shebang line in any script determines the script's ability to be executed like a standalone executable without typing python
beforehand in the terminal or when double clicking it in a file manager (when configured properly). It isn't necessary but generally put there so when someone sees the file opened in an editor, they immediately know what they're looking at. However, which shebang line you use is important.
Correct usage for (defaults to version 3.latest) Python 3 scripts is:
#!/usr/bin/env python3
Correct usage for (defaults to version 2.latest) Python 2 scripts is:
#!/usr/bin/env python2
The following should not be used (except for the rare case that you are writing code which is compatible with both Python 2.x and 3.x):
#!/usr/bin/env python
The reason for these recommendations, given in PEP 394, is that python
can refer either to python2
or python3
on different systems.
Also, do not use:
#!/usr/local/bin/python
"python may be installed at /usr/bin/python or /bin/python in those
cases, the above #! will fail."
―"#!/usr/bin/env python" vs "#!/usr/local/bin/python"
Running .sh file from Python script?
execute a shell-script from Python subprocess
How to execute a shell script through python
Please take a look at these two threads. Hope it helps.
Related Topics
"Valueerror: _Type_ 'V' Not Supported" Error After Installing Pyreadline
Using && in Subprocess.Popen for Command Chaining
Python Requests, How to Specify Port for Outgoing Traffic
Bash: Variable in Single Quote
How to Get Each Dependent Command Execution Output Using Paramiko Exec_Command
How to Run Multiple Subprocesses via Fork()
How to Find Out the Date of the Last Saturday in Linux Shell Script or Python
Trouble Connecting to Phantomjs Webdriver Using Python and Selenium
Why Not Just Use 'Shell=True' in Subprocess.Popen in Python
Typeerror: Argument 1 Must Be Pygame.Surface, Not Str How to Fix
Can't Install Gcloud on Amazon Linux:Invalid Syntax
How to Disable Stdout Buffer When Running Shell
Django Form Dropdown List of Numbers
How to Run Python Script on Terminal (Ubuntu)
Command 'X86_64-Linux-Gnu-Gcc' Failed with Exit Status 1
Installing Python 2.7 Without Root
How to Prompt For User Input and Read Command-Line Arguments