Running a Command Repeatedly
Credit: Philip Nunez
Problem
You need to run a command repeatedly, with arbitrary periodicity.
Solution
The
time.sleep
function
offers a simple approach to this task:
import time, os, sys, string
def main(cmd, inc=60):
while 1:
os.system(cmd)
time.sleep(inc)
if _ _name_ _ == '_ _main_ _' :
if len(sys.argv) < 2 or len(sys.argv) > 3:
print "usage: " + sys.argv[0] + " command [seconds_delay]"
sys.exit(1)
cmd = sys.argv[1]
if len(sys.argv) < 3:
main(cmd)
else:
inc = string.atoi(sys.argv[2])
main(cmd, inc)Discussion
You can use this recipe with a command that periodically checks for
something (e.g., polling) or performs an endlessly-repeating action,
such as telling a browser to reload a URL whose contents change
often, so you always have a recent version of that URL up for
viewing. The recipe is structured into a function called
main
and a body that is preceded by the usual if _ _name_ _=='_ _main_ _': idiom, which ensures that the body executes only
if the script runs as a main script. The body examines the
command-line arguments you used with the script and calls
main appropriately (or gives a usage message if
there are too many or too few arguments). This is always the best way
to structure a script, so its key functionality is also available to
other scripts that may import it as a module.
The main function accepts a cmd string, which is a command you should pass periodically to the operating system’s shell, and, optionally, a period of time in seconds, ...