summaryrefslogtreecommitdiffstats
path: root/Demo/scripts/lpwatch.py
diff options
context:
space:
mode:
authorGuido van Rossum <guido@python.org>1991-06-04 20:36:54 (GMT)
committerGuido van Rossum <guido@python.org>1991-06-04 20:36:54 (GMT)
commitec758ead391daa2ce0e5697aa0e67ec3ba0f37af (patch)
tree7f2d186afd41d797882d5b5be3330e921804ebe9 /Demo/scripts/lpwatch.py
parent0481447f4135c11d42ae25f55696af8e8d52fe74 (diff)
downloadcpython-ec758ead391daa2ce0e5697aa0e67ec3ba0f37af.zip
cpython-ec758ead391daa2ce0e5697aa0e67ec3ba0f37af.tar.gz
cpython-ec758ead391daa2ce0e5697aa0e67ec3ba0f37af.tar.bz2
Initial revision
Diffstat (limited to 'Demo/scripts/lpwatch.py')
-rwxr-xr-xDemo/scripts/lpwatch.py111
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