Bash scripts are widely used for automating tasks in Linux, but sometimes Python is a better choice for handling complex logic. With Python’s subprocess module, you can execute Bash commands, integrate system operations, and even create custom Bash-like scripts.
Why Use Python for Bash Scripting?
- Easier to manage logic and error handling
- More readable than pure Bash scripts
- Ability to leverage Python libraries
- Cross-platform compatibility
Using subprocess to Run Bash Commands
The subprocess module allows executing system commands just like a Bash script.
Running a Simple Command
result = subprocess.run(["ls", "-l"], capture_output=True, text=True) print(result.stdout)
This runs the ls -l command and prints the output.
Running a Command with Piping
result = subprocess.run("ls -l | grep py", shell=True, capture_output=True, text=True)
print(result.stdout)
Using shell=True allows executing compound commands like piping.
Creating a Custom Bash Script in Python
Here’s a script that automates system tasks using Python.
import subprocess
def check_disk_space():
subprocess.run(["df", "-h"])
def list_files(directory="."):
subprocess.run(["ls", "-l", directory])
def main():
print("1. Check Disk Space")
print("2. List Files")
choice = input("Choose an option: ")
if choice == "1":
check_disk_space()
elif choice == "2":
dir_path = input("Enter directory path: ")
list_files(dir_path)
else:
print("Invalid choice")
if __name__ == "__main__":
main()
Making the Script Executable
Save this as script.py, then make it executable:
chmod +x script.py ./script.py
Conclusion
Python can serve as an effective alternative to Bash scripting by using the subprocess module. This approach provides better flexibility, debugging capabilities, and integration with other Python tools.