diff options
author | Guido van Rossum <guido@python.org> | 1991-06-04 20:36:54 (GMT) |
---|---|---|
committer | Guido van Rossum <guido@python.org> | 1991-06-04 20:36:54 (GMT) |
commit | ec758ead391daa2ce0e5697aa0e67ec3ba0f37af (patch) | |
tree | 7f2d186afd41d797882d5b5be3330e921804ebe9 /Demo/scripts/lpwatch.py | |
parent | 0481447f4135c11d42ae25f55696af8e8d52fe74 (diff) | |
download | cpython-ec758ead391daa2ce0e5697aa0e67ec3ba0f37af.zip cpython-ec758ead391daa2ce0e5697aa0e67ec3ba0f37af.tar.gz cpython-ec758ead391daa2ce0e5697aa0e67ec3ba0f37af.tar.bz2 |
Initial revision
Diffstat (limited to 'Demo/scripts/lpwatch.py')
-rwxr-xr-x | Demo/scripts/lpwatch.py | 111 |
1 files changed, 111 insertions, 0 deletions
diff --git a/Demo/scripts/lpwatch.py b/Demo/scripts/lpwatch.py new file mode 100755 index 0000000..294028f --- /dev/null +++ b/Demo/scripts/lpwatch.py @@ -0,0 +1,111 @@ +#! /ufs/guido/bin/sgi/python +#! /usr/local/python + +# Watch line printer queue(s). +# Intended for BSD 4.3 lpq. + +import posix +import sys +import time +import string + +DEF_PRINTER = 'psc' +DEF_DELAY = 10 + +def main(): + delay = DEF_DELAY # XXX Use getopt() later + try: + thisuser = posix.environ['LOGNAME'] + except: + thisuser = posix.environ['USER'] + printers = sys.argv[1:] + if not printers: + if posix.environ.has_key('PRINTER'): + printers = [posix.environ['PRINTER']] + else: + printers = [DEF_PRINTER] + # + clearhome = posix.popen('clear', 'r').read() + # + while 1: + # Pipe output through cat for extra buffering, + # so the output (which overwrites the previous) + # appears instantaneous. + sys.stdout = posix.popen('exec cat', 'w') + sys.stdout.write(clearhome) + for name in printers: + pipe = posix.popen('lpq -P' + name + ' 2>&1', 'r') + showstatus(name, pipe, thisuser) + sts = pipe.close() + if sts: + print name + ': *** lpq exit status', sts + sts = sys.stdout.close() + time.sleep(delay) + +def showstatus(name, pipe, thisuser): + lines = 0 + users = {} + aheadbytes = 0 + aheadjobs = 0 + userseen = 0 + totalbytes = 0 + totaljobs = 0 + while 1: + line = pipe.readline() + if not line: break + fields = string.split(line) + n = len(fields) + if len(fields) >= 6 and fields[n-1] = 'bytes': + rank = fields[0] + user = fields[1] + job = fields[2] + files = fields[3:-2] + bytes = eval(fields[n-2]) + if user = thisuser: + userseen = 1 + elif not userseen: + aheadbytes = aheadbytes + bytes + aheadjobs = aheadjobs + 1 + totalbytes = totalbytes + bytes + totaljobs = totaljobs + 1 + if users.has_key(user): + ujobs, ubytes = users[user] + else: + ujobs, ubytes = 0, 0 + ujobs = ujobs + 1 + ubytes = ubytes + bytes + users[user] = ujobs, ubytes + else: + if fields and fields[0] <> 'Rank': + if line[-1:] = '\n': + line = line[:-1] + if not lines: + print name + ':', + else: + print + print line, + lines = lines + 1 + if totaljobs: + if lines > 1: + print + lines = lines+1 + print (totalbytes+1023)/1024, 'K', + if totaljobs <> len(users): + print '(' + `totaljobs` + ' jobs)', + if len(users) = 1: + print 'for', users.keys()[0], + else: + print 'for', len(users), 'users', + if userseen: + if aheadjobs = 0: + print '(' + thisuser + ' first)', + else: + print '(' + `(aheadbytes+1023)/1024`, + print 'K before', thisuser + ')' + if lines: + print + +try: + main() +except KeyboardInterrupt: + pass |