Skip to content
Related Articles

Related Articles

Improve Article
How to run bash script in Python?
  • Last Updated : 26 Mar, 2021

If you are using any major operating system you are indirectly interacting with bash. If you are running Ubuntu, Linux Mint, or any other Linux distribution, you are interacting with bash every time you use the terminal. Suppose you have written your bash script that needs to be invoked from python code. The module designed to spawn new processes and communicate with them has a name subprocess.

Let’s consider such a simple example, presenting a recommended approach to invoking subprocesses. As an argument, you have to pass the command you want to invoke and its arguments, all wrapped in a list.

Python3




import subprocess
  
  
# execute command
subprocess.run(["echo", "Geeks for geeks"])

Output:

CompletedProcess(args=[‘echo’, ‘Geeks for geeks’], returncode=0)



A new process is created and command echo is invoked with the argument “Geeks for geeks”. Although, the command’s result is not captured by the python script. We can do it by adding optional keyword argument capture_output=True to run the function, or by invoking check_output function from the same module. Both functions invoke the command, but the first one is available in Python3.7 and newer versions.

Python3




import subprocess
  
  
# From Python3.7 you can add 
# keyword argument capture_output
print(subprocess.run(["echo", "Geeks for geeks"], 
                     capture_output=True))
  
# For older versions of Python:
print(subprocess.check_output(["echo"
                               "Geeks for geeks"]))

Output:

CompletedProcess(args=[‘echo’, ‘Geeks for geeks’], returncode=0, stdout=b’Geeks for geeks\n’, stderr=b”)

b’Geeks for geeks\n’

What about invoking already existing shell script from python code? It’s also done by run command!

Python3




import subprocess
  
  
# If your shell script has shebang, 
# you can omit shell=True argument.
subprocess.run(["/path/to/your/shell/script"
                "arguments"], shell=True)

Output:

CompletedProcess(args=[‘/path/to/your/shell/script’, ‘arguments’], returncode=127)

Common problems with invoking shell script and how to solve them:

  • Permission denied when invoking script — don’t forget to make your script executable! Use chmod +x /path/to/your/script
  • OSError: [Errno 8] Exec format error — run functions lacks shell=True option or script has no shebang.

 Attention geek! Strengthen your foundations with the Python Programming Foundation Course and learn the basics.  

To begin with, your interview preparations Enhance your Data Structures concepts with the Python DS Course. And to begin with your Machine Learning Journey, join the Machine Learning – Basic Level Course




My Personal Notes arrow_drop_up
Recommended Articles
Page :