Python Scripting Tutorial.

Shell Scripting:

One of the most useful packages for unix shell scripters in python is the subprocess package. The simplest use of this package is to use the call function to call a shell command:

#!/usr/bin/env python
import subprocess
subprocess.call("ls -l", shell=True)

This script will call the unix command "ls -l" and print the output to the console. While this is useful, most of the time you want to process the results of the call inside your script instead of just printing them to the console. To do this, you will need to open the process with the Popen function. The Popen function works a little different than call(), it takes an array containing the process to invoke and its command line parameters. So if we wanted to tail the last 500 lines of a log file, we would pass in each of the parameters as a new element in the array. The following script shows how:

#!/usr/bin/env python
import subprocess
 
proc = subprocess.Popen(['tail', '-500', 'mylogfile.log'], stdout=subprocess.PIPE)
 
for line in proc.stdout.readlines():
    print line.rstrip()

This script will open the process on unix "tail -500 mylogfile.log", read the output of the command and print it to the console.

The first thing the script does is create a variable "proc", this is the process object returned by the call to subprocess.Popen. In the call to Popen, it passes the 3 arguments to call the tail command (the command itself and the 2 command line arguments) as a single array, then it sets the "stdout" variable of the process to subprocess.PIPE, which means that it will pipe the output back to your script via the "proc.stdout" variable. From there it loops through calling readlines() and prints each line to the console. You will also notice it calls rstrip() on the line, this is a trim function that trims any whitespace, including returns, from the right side of the string. This is done because readlines() returns the string with a return character at the end of it, and print already prints a return.


I hope you have enjoyed this tutorial introduction to python.

No comments: