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: opensuse+unsubscribe@opensuse.org For additional commands, e-mail: opensuse+help@opensuse.org