summaryrefslogtreecommitdiffstats
path: root/AppPkg/Applications/Python/Python-2.7.2/Demo/scripts/lpwatch.py
diff options
context:
space:
mode:
Diffstat (limited to 'AppPkg/Applications/Python/Python-2.7.2/Demo/scripts/lpwatch.py')
-rw-r--r--AppPkg/Applications/Python/Python-2.7.2/Demo/scripts/lpwatch.py102
1 files changed, 102 insertions, 0 deletions
diff --git a/AppPkg/Applications/Python/Python-2.7.2/Demo/scripts/lpwatch.py b/AppPkg/Applications/Python/Python-2.7.2/Demo/scripts/lpwatch.py
new file mode 100644
index 0000000000..61e937fd2a
--- /dev/null
+++ b/AppPkg/Applications/Python/Python-2.7.2/Demo/scripts/lpwatch.py
@@ -0,0 +1,102 @@
+#! /usr/bin/env python
+
+# Watch line printer queue(s).
+# Intended for BSD 4.3 lpq.
+
+import os
+import sys
+import time
+
+DEF_PRINTER = 'psc'
+DEF_DELAY = 10
+
+def main():
+ delay = DEF_DELAY # XXX Use getopt() later
+ try:
+ thisuser = os.environ['LOGNAME']
+ except:
+ thisuser = os.environ['USER']
+ printers = sys.argv[1:]
+ if printers:
+ # Strip '-P' from printer names just in case
+ # the user specified it...
+ for i, name in enumerate(printers):
+ if name[:2] == '-P':
+ printers[i] = name[2:]
+ else:
+ if os.environ.has_key('PRINTER'):
+ printers = [os.environ['PRINTER']]
+ else:
+ printers = [DEF_PRINTER]
+
+ clearhome = os.popen('clear', 'r').read()
+
+ while True:
+ text = clearhome
+ for name in printers:
+ text += makestatus(name, thisuser) + '\n'
+ print text
+ time.sleep(delay)
+
+def makestatus(name, thisuser):
+ pipe = os.popen('lpq -P' + name + ' 2>&1', 'r')
+ lines = []
+ users = {}
+ aheadbytes = 0
+ aheadjobs = 0
+ userseen = False
+ totalbytes = 0
+ totaljobs = 0
+ for line in pipe:
+ fields = line.split()
+ n = len(fields)
+ if len(fields) >= 6 and fields[n-1] == 'bytes':
+ rank, user, job = fields[0:3]
+ files = fields[3:-2]
+ bytes = int(fields[n-2])
+ if user == thisuser:
+ userseen = True
+ elif not userseen:
+ aheadbytes += bytes
+ aheadjobs += 1
+ totalbytes += bytes
+ totaljobs += 1
+ ujobs, ubytes = users.get(user, (0, 0))
+ ujobs += 1
+ ubytes += bytes
+ users[user] = ujobs, ubytes
+ else:
+ if fields and fields[0] != 'Rank':
+ line = line.strip()
+ if line == 'no entries':
+ line = name + ': idle'
+ elif line[-22:] == ' is ready and printing':
+ line = name
+ lines.append(line)
+
+ if totaljobs:
+ line = '%d K' % ((totalbytes+1023) // 1024)
+ if totaljobs != len(users):
+ line += ' (%d jobs)' % totaljobs
+ if len(users) == 1:
+ line += ' for %s' % (users.keys()[0],)
+ else:
+ line += ' for %d users' % len(users)
+ if userseen:
+ if aheadjobs == 0:
+ line += ' (%s first)' % thisuser
+ else:
+ line += ' (%d K before %s)' % (
+ (aheadbytes+1023) // 1024, thisuser)
+ lines.append(line)
+
+ sts = pipe.close()
+ if sts:
+ lines.append('lpq exit status %r' % (sts,))
+ return ': '.join(lines)
+
+if __name__ == "__main__":
+ try:
+ main()
+ except KeyboardInterrupt:
+ pass