source: python/trunk/Demo/scripts/lpwatch.py

Last change on this file was 391, checked in by dmik, 11 years ago

python: Merge vendor 2.7.6 to trunk.

  • Property svn:eol-style set to native
File size: 2.8 KB
RevLine 
[2]1#! /usr/bin/env python
2
3# Watch line printer queue(s).
4# Intended for BSD 4.3 lpq.
5
[391]6import os
[2]7import sys
8import time
9
10DEF_PRINTER = 'psc'
11DEF_DELAY = 10
12
13def main():
14 delay = DEF_DELAY # XXX Use getopt() later
15 try:
[391]16 thisuser = os.environ['LOGNAME']
[2]17 except:
[391]18 thisuser = os.environ['USER']
[2]19 printers = sys.argv[1:]
20 if printers:
21 # Strip '-P' from printer names just in case
22 # the user specified it...
[391]23 for i, name in enumerate(printers):
24 if name[:2] == '-P':
25 printers[i] = name[2:]
[2]26 else:
[391]27 if os.environ.has_key('PRINTER'):
28 printers = [os.environ['PRINTER']]
[2]29 else:
30 printers = [DEF_PRINTER]
[391]31
32 clearhome = os.popen('clear', 'r').read()
33
34 while True:
[2]35 text = clearhome
36 for name in printers:
[391]37 text += makestatus(name, thisuser) + '\n'
[2]38 print text
39 time.sleep(delay)
40
41def makestatus(name, thisuser):
[391]42 pipe = os.popen('lpq -P' + name + ' 2>&1', 'r')
[2]43 lines = []
44 users = {}
45 aheadbytes = 0
46 aheadjobs = 0
[391]47 userseen = False
[2]48 totalbytes = 0
49 totaljobs = 0
[391]50 for line in pipe:
51 fields = line.split()
[2]52 n = len(fields)
53 if len(fields) >= 6 and fields[n-1] == 'bytes':
[391]54 rank, user, job = fields[0:3]
[2]55 files = fields[3:-2]
[391]56 bytes = int(fields[n-2])
[2]57 if user == thisuser:
[391]58 userseen = True
[2]59 elif not userseen:
[391]60 aheadbytes += bytes
61 aheadjobs += 1
62 totalbytes += bytes
63 totaljobs += 1
64 ujobs, ubytes = users.get(user, (0, 0))
65 ujobs += 1
66 ubytes += bytes
[2]67 users[user] = ujobs, ubytes
68 else:
[391]69 if fields and fields[0] != 'Rank':
70 line = line.strip()
[2]71 if line == 'no entries':
72 line = name + ': idle'
73 elif line[-22:] == ' is ready and printing':
74 line = name
75 lines.append(line)
[391]76
[2]77 if totaljobs:
[391]78 line = '%d K' % ((totalbytes+1023) // 1024)
79 if totaljobs != len(users):
80 line += ' (%d jobs)' % totaljobs
[2]81 if len(users) == 1:
[391]82 line += ' for %s' % (users.keys()[0],)
[2]83 else:
[391]84 line += ' for %d users' % len(users)
[2]85 if userseen:
86 if aheadjobs == 0:
[391]87 line += ' (%s first)' % thisuser
[2]88 else:
[391]89 line += ' (%d K before %s)' % (
90 (aheadbytes+1023) // 1024, thisuser)
[2]91 lines.append(line)
[391]92
[2]93 sts = pipe.close()
94 if sts:
95 lines.append('lpq exit status %r' % (sts,))
[391]96 return ': '.join(lines)
[2]97
98if __name__ == "__main__":
99 try:
100 main()
101 except KeyboardInterrupt:
102 pass
Note: See TracBrowser for help on using the repository browser.