annotate Demo/scripts/lpwatch.py @ 5817:48b94de85bf3 legacy-trunk

Extensive changes by AMK.
author Guido van Rossum <guido@python.org>
date Thu, 17 Jul 1997 16:29:42 +0000
parents 73758db2f464
children 71a294bd7950
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
4573
73758db2f464 /usr/local/bin/python -> /usr/bin/env python
Guido van Rossum <guido@python.org>
parents: 1506
diff changeset
1 #! /usr/bin/env python
274
12a64115a4ee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
2
12a64115a4ee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
3 # Watch line printer queue(s).
12a64115a4ee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
4 # Intended for BSD 4.3 lpq.
12a64115a4ee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
5
12a64115a4ee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
6 import posix
12a64115a4ee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
7 import sys
12a64115a4ee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
8 import time
12a64115a4ee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
9 import string
12a64115a4ee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
10
12a64115a4ee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
11 DEF_PRINTER = 'psc'
12a64115a4ee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
12 DEF_DELAY = 10
12a64115a4ee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
13
12a64115a4ee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
14 def main():
12a64115a4ee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
15 delay = DEF_DELAY # XXX Use getopt() later
12a64115a4ee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
16 try:
12a64115a4ee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
17 thisuser = posix.environ['LOGNAME']
12a64115a4ee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
18 except:
12a64115a4ee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
19 thisuser = posix.environ['USER']
12a64115a4ee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
20 printers = sys.argv[1:]
297
abccb0f9f735 Strip redundant -P from arguments; only print 'ahead' count
Guido van Rossum <guido@python.org>
parents: 274
diff changeset
21 if printers:
abccb0f9f735 Strip redundant -P from arguments; only print 'ahead' count
Guido van Rossum <guido@python.org>
parents: 274
diff changeset
22 # Strip '-P' from printer names just in case
abccb0f9f735 Strip redundant -P from arguments; only print 'ahead' count
Guido van Rossum <guido@python.org>
parents: 274
diff changeset
23 # the user specified it...
abccb0f9f735 Strip redundant -P from arguments; only print 'ahead' count
Guido van Rossum <guido@python.org>
parents: 274
diff changeset
24 for i in range(len(printers)):
559
683edb0c4463 New == syntax
Guido van Rossum <guido@python.org>
parents: 502
diff changeset
25 if printers[i][:2] == '-P':
297
abccb0f9f735 Strip redundant -P from arguments; only print 'ahead' count
Guido van Rossum <guido@python.org>
parents: 274
diff changeset
26 printers[i] = printers[i][2:]
abccb0f9f735 Strip redundant -P from arguments; only print 'ahead' count
Guido van Rossum <guido@python.org>
parents: 274
diff changeset
27 else:
274
12a64115a4ee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
28 if posix.environ.has_key('PRINTER'):
12a64115a4ee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
29 printers = [posix.environ['PRINTER']]
12a64115a4ee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
30 else:
12a64115a4ee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
31 printers = [DEF_PRINTER]
12a64115a4ee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
32 #
12a64115a4ee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
33 clearhome = posix.popen('clear', 'r').read()
12a64115a4ee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
34 #
12a64115a4ee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
35 while 1:
502
67f6f71943c1 Modularized the code.
Guido van Rossum <guido@python.org>
parents: 297
diff changeset
36 text = clearhome
274
12a64115a4ee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
37 for name in printers:
502
67f6f71943c1 Modularized the code.
Guido van Rossum <guido@python.org>
parents: 297
diff changeset
38 text = text + makestatus(name, thisuser) + '\n'
67f6f71943c1 Modularized the code.
Guido van Rossum <guido@python.org>
parents: 297
diff changeset
39 print text
274
12a64115a4ee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
40 time.sleep(delay)
12a64115a4ee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
41
502
67f6f71943c1 Modularized the code.
Guido van Rossum <guido@python.org>
parents: 297
diff changeset
42 def makestatus(name, thisuser):
67f6f71943c1 Modularized the code.
Guido van Rossum <guido@python.org>
parents: 297
diff changeset
43 pipe = posix.popen('lpq -P' + name + ' 2>&1', 'r')
67f6f71943c1 Modularized the code.
Guido van Rossum <guido@python.org>
parents: 297
diff changeset
44 lines = []
274
12a64115a4ee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
45 users = {}
12a64115a4ee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
46 aheadbytes = 0
12a64115a4ee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
47 aheadjobs = 0
12a64115a4ee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
48 userseen = 0
12a64115a4ee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
49 totalbytes = 0
12a64115a4ee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
50 totaljobs = 0
12a64115a4ee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
51 while 1:
12a64115a4ee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
52 line = pipe.readline()
12a64115a4ee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
53 if not line: break
12a64115a4ee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
54 fields = string.split(line)
12a64115a4ee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
55 n = len(fields)
559
683edb0c4463 New == syntax
Guido van Rossum <guido@python.org>
parents: 502
diff changeset
56 if len(fields) >= 6 and fields[n-1] == 'bytes':
274
12a64115a4ee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
57 rank = fields[0]
12a64115a4ee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
58 user = fields[1]
12a64115a4ee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
59 job = fields[2]
12a64115a4ee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
60 files = fields[3:-2]
12a64115a4ee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
61 bytes = eval(fields[n-2])
559
683edb0c4463 New == syntax
Guido van Rossum <guido@python.org>
parents: 502
diff changeset
62 if user == thisuser:
274
12a64115a4ee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
63 userseen = 1
12a64115a4ee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
64 elif not userseen:
12a64115a4ee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
65 aheadbytes = aheadbytes + bytes
12a64115a4ee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
66 aheadjobs = aheadjobs + 1
12a64115a4ee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
67 totalbytes = totalbytes + bytes
12a64115a4ee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
68 totaljobs = totaljobs + 1
12a64115a4ee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
69 if users.has_key(user):
12a64115a4ee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
70 ujobs, ubytes = users[user]
12a64115a4ee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
71 else:
12a64115a4ee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
72 ujobs, ubytes = 0, 0
12a64115a4ee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
73 ujobs = ujobs + 1
12a64115a4ee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
74 ubytes = ubytes + bytes
12a64115a4ee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
75 users[user] = ujobs, ubytes
12a64115a4ee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
76 else:
12a64115a4ee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
77 if fields and fields[0] <> 'Rank':
502
67f6f71943c1 Modularized the code.
Guido van Rossum <guido@python.org>
parents: 297
diff changeset
78 line = string.strip(line)
559
683edb0c4463 New == syntax
Guido van Rossum <guido@python.org>
parents: 502
diff changeset
79 if line == 'no entries':
502
67f6f71943c1 Modularized the code.
Guido van Rossum <guido@python.org>
parents: 297
diff changeset
80 line = name + ': idle'
559
683edb0c4463 New == syntax
Guido van Rossum <guido@python.org>
parents: 502
diff changeset
81 elif line[-22:] == ' is ready and printing':
502
67f6f71943c1 Modularized the code.
Guido van Rossum <guido@python.org>
parents: 297
diff changeset
82 line = name
67f6f71943c1 Modularized the code.
Guido van Rossum <guido@python.org>
parents: 297
diff changeset
83 lines.append(line)
67f6f71943c1 Modularized the code.
Guido van Rossum <guido@python.org>
parents: 297
diff changeset
84 #
274
12a64115a4ee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
85 if totaljobs:
502
67f6f71943c1 Modularized the code.
Guido van Rossum <guido@python.org>
parents: 297
diff changeset
86 line = `(totalbytes+1023)/1024` + ' K'
274
12a64115a4ee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
87 if totaljobs <> len(users):
502
67f6f71943c1 Modularized the code.
Guido van Rossum <guido@python.org>
parents: 297
diff changeset
88 line = line + ' (' + `totaljobs` + ' jobs)'
559
683edb0c4463 New == syntax
Guido van Rossum <guido@python.org>
parents: 502
diff changeset
89 if len(users) == 1:
502
67f6f71943c1 Modularized the code.
Guido van Rossum <guido@python.org>
parents: 297
diff changeset
90 line = line + ' for ' + users.keys()[0]
274
12a64115a4ee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
91 else:
502
67f6f71943c1 Modularized the code.
Guido van Rossum <guido@python.org>
parents: 297
diff changeset
92 line = line + ' for ' + `len(users)` + ' users'
297
abccb0f9f735 Strip redundant -P from arguments; only print 'ahead' count
Guido van Rossum <guido@python.org>
parents: 274
diff changeset
93 if userseen:
559
683edb0c4463 New == syntax
Guido van Rossum <guido@python.org>
parents: 502
diff changeset
94 if aheadjobs == 0:
502
67f6f71943c1 Modularized the code.
Guido van Rossum <guido@python.org>
parents: 297
diff changeset
95 line = line + ' (' + thisuser + ' first)'
297
abccb0f9f735 Strip redundant -P from arguments; only print 'ahead' count
Guido van Rossum <guido@python.org>
parents: 274
diff changeset
96 else:
502
67f6f71943c1 Modularized the code.
Guido van Rossum <guido@python.org>
parents: 297
diff changeset
97 line = line + ' (' + `(aheadbytes+1023)/1024`
67f6f71943c1 Modularized the code.
Guido van Rossum <guido@python.org>
parents: 297
diff changeset
98 line = line + ' K before ' + thisuser + ')'
67f6f71943c1 Modularized the code.
Guido van Rossum <guido@python.org>
parents: 297
diff changeset
99 lines.append(line)
67f6f71943c1 Modularized the code.
Guido van Rossum <guido@python.org>
parents: 297
diff changeset
100 #
67f6f71943c1 Modularized the code.
Guido van Rossum <guido@python.org>
parents: 297
diff changeset
101 sts = pipe.close()
67f6f71943c1 Modularized the code.
Guido van Rossum <guido@python.org>
parents: 297
diff changeset
102 if sts:
67f6f71943c1 Modularized the code.
Guido van Rossum <guido@python.org>
parents: 297
diff changeset
103 lines.append('lpq exit status ' + `sts`)
67f6f71943c1 Modularized the code.
Guido van Rossum <guido@python.org>
parents: 297
diff changeset
104 return string.joinfields(lines, ': ')
274
12a64115a4ee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
105
12a64115a4ee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
106 try:
12a64115a4ee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
107 main()
12a64115a4ee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
108 except KeyboardInterrupt:
12a64115a4ee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
109 pass