summaryrefslogtreecommitdiffstats
path: root/Demo/curses/repeat.py
diff options
context:
space:
mode:
authorGuido van Rossum <guido@python.org>2001-01-05 20:54:07 (GMT)
committerGuido van Rossum <guido@python.org>2001-01-05 20:54:07 (GMT)
commit2b287763695c11594bb26e8d49d030855e4663fe (patch)
tree94fa939830bbb9e8e783e1de4b952828e9160a22 /Demo/curses/repeat.py
parentcadfaeca7f2297f52903eac6b7067f0efbc8b745 (diff)
downloadcpython-2b287763695c11594bb26e8d49d030855e4663fe.zip
cpython-2b287763695c11594bb26e8d49d030855e4663fe.tar.gz
cpython-2b287763695c11594bb26e8d49d030855e4663fe.tar.bz2
Added "repeat.py" -- repeatedly execute a shell command (like
watch(1)). Updated and untabified the README file.
Diffstat (limited to 'Demo/curses/repeat.py')
-rwxr-xr-xDemo/curses/repeat.py58
1 files changed, 58 insertions, 0 deletions
diff --git a/Demo/curses/repeat.py b/Demo/curses/repeat.py
new file mode 100755
index 0000000..158264c
--- /dev/null
+++ b/Demo/curses/repeat.py
@@ -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()