summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rwxr-xr-xDemo/curses/repeat.py46
1 files changed, 34 insertions, 12 deletions
diff --git a/Demo/curses/repeat.py b/Demo/curses/repeat.py
index 1083239..93372c5 100755
--- a/Demo/curses/repeat.py
+++ b/Demo/curses/repeat.py
@@ -1,6 +1,6 @@
#! /usr/bin/env python
-"""repeat <shell-command>
+"""repeat [-i SECONDS] <shell-command>
This simple program repeatedly (at 1-second intervals) executes the
shell command given on the command line and displays the output (or as
@@ -9,6 +9,8 @@ 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.
+The -i option lets you override the sleep time between executions.
+
To end, hit Control-C.
"""
@@ -24,18 +26,30 @@ import os
import sys
import time
import curses
+import getopt
def main():
- if not sys.argv[1:]:
+ interval = 1.0
+ try:
+ opts, args = getopt.getopt(sys.argv[1:], "hi:")
+ except getopt.error as err:
+ print(err, file=sys.stderr)
+ sys.exit(2)
+ if not args:
print(__doc__)
sys.exit(0)
- cmd = " ".join(sys.argv[1:])
- p = os.popen(cmd, "r")
+ for opt, arg in opts:
+ if opt == "-i":
+ interval = float(arg)
+ if opt == "-h":
+ print(__doc__)
+ sys.exit(0)
+ cmd = " ".join(args)
+ cmd_really = cmd + " 2>&1"
+ p = os.popen(cmd_really, "r")
text = p.read()
sts = p.close()
- if sts:
- print("Exit code:", sts, file=sys.stderr)
- sys.exit(sts)
+ text = addsts(interval, cmd, text, sts)
w = curses.initscr()
try:
while True:
@@ -45,14 +59,22 @@ def main():
except curses.error:
pass
w.refresh()
- time.sleep(1)
- p = os.popen(cmd, "r")
+ time.sleep(interval)
+ p = os.popen(cmd_really, "r")
text = p.read()
sts = p.close()
- if sts:
- print("Exit code:", sts, file=sys.stderr)
- sys.exit(sts)
+ text = addsts(interval, cmd, text, sts)
finally:
curses.endwin()
+def addsts(interval, cmd, text, sts):
+ now = time.strftime("%H:%M:%S")
+ text = "%s, every %g sec: %s\n%s" % (now, interval, cmd, text)
+ if sts:
+ msg = "Exit status: %d; signal: %d" % (sts>>8, sts&0xFF)
+ if text and not text.endswith("\n"):
+ msg = "\n" + msg
+ text += msg
+ return text
+
main()