Commit 8161a65c authored by Guido van Rossum's avatar Guido van Rossum

Add -i option. Don't exit when the command fails. Redirect stderr to stdout.

parent db4a2ef2
#! /usr/bin/env python #! /usr/bin/env python
"""repeat <shell-command> """repeat [-i SECONDS] <shell-command>
This simple program repeatedly (at 1-second intervals) executes the This simple program repeatedly (at 1-second intervals) executes the
shell command given on the command line and displays the output (or as 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 ...@@ -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 screen doesn't change. This is handy to watch for changes in e.g. a
directory or process listing. directory or process listing.
The -i option lets you override the sleep time between executions.
To end, hit Control-C. To end, hit Control-C.
""" """
...@@ -24,18 +26,30 @@ import os ...@@ -24,18 +26,30 @@ import os
import sys import sys
import time import time
import curses import curses
import getopt
def main(): 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)
for opt, arg in opts:
if opt == "-i":
interval = float(arg)
if opt == "-h":
print(__doc__) print(__doc__)
sys.exit(0) sys.exit(0)
cmd = " ".join(sys.argv[1:]) cmd = " ".join(args)
p = os.popen(cmd, "r") cmd_really = cmd + " 2>&1"
p = os.popen(cmd_really, "r")
text = p.read() text = p.read()
sts = p.close() sts = p.close()
if sts: text = addsts(interval, cmd, text, sts)
print("Exit code:", sts, file=sys.stderr)
sys.exit(sts)
w = curses.initscr() w = curses.initscr()
try: try:
while True: while True:
...@@ -45,14 +59,22 @@ def main(): ...@@ -45,14 +59,22 @@ def main():
except curses.error: except curses.error:
pass pass
w.refresh() w.refresh()
time.sleep(1) time.sleep(interval)
p = os.popen(cmd, "r") p = os.popen(cmd_really, "r")
text = p.read() text = p.read()
sts = p.close() sts = p.close()
if sts: text = addsts(interval, cmd, text, sts)
print("Exit code:", sts, file=sys.stderr)
sys.exit(sts)
finally: finally:
curses.endwin() 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() main()
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment