Added "repeat.py" -- repeatedly execute a shell command (like

watch(1)).  Updated and untabified the README file.
This commit is contained in:
Guido van Rossum 2001-01-05 20:54:07 +00:00
parent cadfaeca7f
commit 2b28776369
2 changed files with 64 additions and 7 deletions

View file

@ -10,11 +10,11 @@ originals. I won't attempt to `beautify' the program anytime soon, but
I wouldn't mind someone else making an effort in that direction, of
course.
ncurses.py -- currently only a panels demo
ncurses.py -- currently only a panels demo
XXX this won't work until panel support is checked in
rain.py -- raindrops keep falling on my desktop
tclock.py -- ASCII clock, by Howard Jones
xmas.py -- I'm dreaming of an ASCII christmas
rain.py -- raindrops keep falling on my desktop
tclock.py -- ASCII clock, by Howard Jones
xmas.py -- I'm dreaming of an ASCII christmas
Please send bugfixes and new contributions to me or, even better,
submit them to the Python Bug Tracker on SourceForge
@ -24,6 +24,5 @@ submit them to the Python Bug Tracker on SourceForge
Other demos
===========
life.py Simple game of Life
life.py -- Simple game of Life
repeat.py -- Repeatedly execute a shell command (like watch(1))

58
Demo/curses/repeat.py Executable file
View file

@ -0,0 +1,58 @@
#! /usr/bin/env python
"""repeat <shell-command>
This simple program repeatedly (with 1-second intervals) executes the
shell command given on the command line and displays the output (or as
much of it as fits on the screen). It uses curses to paint each new
output on top of the old output, so that if nothing changes, the
screen doesn't change. This is handy to watch for changes in e.g. a
directory or process listing.
To end, hit Control-C.
"""
# Author: Guido van Rossum
# Disclaimer: there's a Linux program named 'watch' that does the same
# thing. Honestly, I didn't know of its existence when I wrote this!
# To do: add features until it has the same functionality as watch(1);
# then compare code size and development time.
import os
import sys
import time
import curses
def main():
if not sys.argv[1:]:
print __doc__
sys.exit(0)
cmd = " ".join(sys.argv[1:])
p = os.popen(cmd, "r")
text = p.read()
sts = p.close()
if sts:
print >>sys.stderr, "Exit code:", sts
sys.exit(sts)
w = curses.initscr()
try:
while 1:
w.erase()
try:
w.addstr(text)
except curses.error:
pass
w.refresh()
time.sleep(1)
p = os.popen(cmd, "r")
text = p.read()
sts = p.close()
if sts:
print >>sys.stderr, "Exit code:", sts
sys.exit(sts)
finally:
curses.endwin()
main()