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