Mandag 26 marts 2007 15:21 kvad Philippe Andersson:
> Hi Johnny,
>
> Johnny Ernst Nielsen wrote:
> > Mandag 26 marts 2007 15:05 kvad Philippe Andersson:
> >> Johnny Ernst Nielsen wrote:
> >>> My printer's ink level program is unable to display ink level
> >>> as well as print when either one of the four cartridges are
> >>> empty. The cartridges are opaque and the printer itself only
> >>> lights up one single light to signal that one of the cartridges
> >>> are empty.
> >>
> >> Would this be some sort of Epson all-in-one device, by any
> >> chance ?
> >
> > No. Printer only. Epson Stylus C66.
>
> Well, maybe the printer part of the all-in-one uses the same
> driver. My kid sister has one of those, and faces the same troubles
> managing the ink. I'd be interested in your scripts, if you agree
> to share them.
Sure.
It's basically just a loop that calls the printer driver's command
line ink level function, appends the answer to a file, and goes to
sleep for 60 seconds.
Please note that this script is hardcoded for my printer and the
specific proprietary printer driver I use.
Please also note that the posted code is translated from danish, so
typing errors may have been introduced.
Here is the Python code:
---o---
#!/usr/bin/python
# -*- coding: utf8 -*-
#IMPORT PRACTICAL MODULES FOR DATA HANDLING.
#Handling of sub processes/calls of programs to have their output
directly readable in the script.
import subprocess
#Handling of files.
import os
#For suspending the script for a given time.
import time
#Date and time.
import datetime
#String manipulation:
import string
#PRACTICAL VARIABLES.
#The place and name for the ink level log.
inklevellogfile="/root/Inklevellog.txt"
#The place and name of the ink level log error file.
inklevellogerrorfile="/root/Inklevellogerror.txt"
#HERE STARTS THE SCRIPT.
#Make a list to keep the previous result.
previousresult=[]
#Get the latest log entry.
if os.path.isfile(inklevellogfile):
file=open(inklevellogfile, 'rU')
#Read all the file's lines into a result list.
previousresult=file.readlines()
#Close the file.
file.close()
#If the file was not brand new.
if len(previousresult) > 1:
#Remove all lines, except the last four, which contains the
latest
ink level. I.e. keep from the 5Th last line to 2Nd last line.
previousresult=previousresult[len(previousresult)-5:-1]
#Make the list into a string.
previousresult=repr(previousresult)
#Remove alle encoded line breaks.
previousresult=string.replace(previousresult,"\\n","")
#Remove all double spacing.
while " " in previousresult:
previousresult=string.replace(previousresult," "," ")
#There was no ink level log.
else:
#Make an empty log file.
file=open(inklevellogfile, "w")
file.close()
#Assume all cartridges are 100% filled.
previousresult="['Black : 100%', 'Cyan : 100%', 'Magenta :
100%', 'Yellow : 100%']"
#Never ending loop...
while True:
#List USB-devices.
process=subprocess.Popen("/usr/sbin/lsusb", shell=True,
stdout=subprocess.PIPE, stderr=subprocess.PIPE)
result=process.stdout.read()
#See if the printer is among the USB devices.
if "Seiko Epson Corp. Stylus Printer" in result:
#See if the printer is idle/not engaged in printing.
process=subprocess.Popen("lpstat -p", shell=True,
stdout=subprocess.PIPE, stderr=subprocess.PIPE)
result=process.stdout.read()
#If the printer is idle.
if " is idle." in result:
#Get date and time.
time=datetime.datetime.now()
#Check ink level.
process=subprocess.Popen("/usr/bin/tpconfig --ink",
shell=True,
stdout=subprocess.PIPE, stderr=subprocess.PIPE)
result=process.stdout.readlines()
errorresult=process.stderr.read()
#Make the result into a string.
result=repr(result)
#Remove all encoded line breaks.
result=string.replace(result,"\\n","")
#Remove all double spaces.
while " " in result:
result=string.replace(result," "," ")
#If an ink level is reported...
if "Black :" in result:
#...and the ink level is different from the
previous ink level; we
must add a log entry.
if not result==previousresult:
#Make the string into a list, so we can
write the four lines of
ink levels in the log.
result=eval(result)
#Append date, time and ink level to the
log file.
file=open(inklevellogfile, "aw")
file.write(time.strftime("Day: %d,
month: %m, year: %Y, time: %H.
%M\n"))
for line in result:
file.write(line+'\n')
#Dividing line.
file.write("---o---\n")
file.close()
#Remember the new result for the next
comparison.
previousresult=repr(result)
#If no ink level is reported, we must log an error.
else:
#Open the error log.
file=open(inklevellogerrorfile, "aw")
#Write date and time.
file.write(time.strftime("Day: %d, month: %m,
year: %Y, time: %H.
%M\n"))
#Write the error.
file.write(errorresult)
#Dividing line.
file.write("---o---\n")
file.close()
#Wait 60 seconds before next ink level check.
time.sleep(60)
#[END OF SCRIPT]
---o---
Best regards :o)
Johnny :o)
--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]