symbian-qemu-0.9.1-12/python-2.6.1/Demo/scripts/lpwatch.py
author Gareth Stockwell <gareth.stockwell@accenture.com>
Wed, 22 Sep 2010 15:40:40 +0100
branchgraphics-phase-3
changeset 111 345f1c88c950
parent 1 2fb8b9db1c86
permissions -rw-r--r--
Fixes to syborg-graphicswrapper.vcproj These changes allow syborg-graphicswrapper to link against the hostthreadadapter and khronosapiwrapper libraries built by the graphics.simulator component. The .vcproj file uses relative paths, which requires that the following three packages are laid out as follows: os/ graphics adapt/ graphics.simulator qemu

#! /usr/bin/env 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 printers:
        # Strip '-P' from printer names just in case
        # the user specified it...
        for i in range(len(printers)):
            if printers[i][:2] == '-P':
                printers[i] = printers[i][2:]
    else:
        if posix.environ.has_key('PRINTER'):
            printers = [posix.environ['PRINTER']]
        else:
            printers = [DEF_PRINTER]
    #
    clearhome = posix.popen('clear', 'r').read()
    #
    while 1:
        text = clearhome
        for name in printers:
            text = text + makestatus(name, thisuser) + '\n'
        print text
        time.sleep(delay)

def makestatus(name, thisuser):
    pipe = posix.popen('lpq -P' + name + ' 2>&1', 'r')
    lines = []
    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':
                line = string.strip(line)
                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 = line + ' (%d jobs)' % totaljobs
        if len(users) == 1:
            line = line + ' for %s' % (users.keys()[0],)
        else:
            line = line + ' for %d users' % len(users)
            if userseen:
                if aheadjobs == 0:
                    line =  line + ' (%s first)' % thisuser
                else:
                    line = 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 string.joinfields(lines, ': ')

if __name__ == "__main__":
    try:
        main()
    except KeyboardInterrupt:
        pass