mirror of
				https://github.com/python/cpython.git
				synced 2025-11-03 23:21:29 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			58 lines
		
	
	
	
		
			1.5 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable file
		
	
	
	
	
			
		
		
	
	
			58 lines
		
	
	
	
		
			1.5 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable file
		
	
	
	
	
#! /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()
 |