117 lines
3.5 KiB
Python
Executable file
117 lines
3.5 KiB
Python
Executable file
#!/usr/bin/env python
|
|
# -*- coding: iso-8859-15 -*-
|
|
|
|
"""Classe de communication avec l'imprimante
|
|
HP9500"""
|
|
|
|
import socket
|
|
|
|
class hp9500:
|
|
"Classe de communication avec la HP9500"
|
|
#\x1B est le caractere d'échappement échap.
|
|
UEL="\x1b%-12345X"
|
|
__douille=None
|
|
def __init__(self,hostname="laserjet.adm.crans.org",port=9100):
|
|
"""Appelle à l'initalisation
|
|
hostname : nom d'hôte de l'imprimante
|
|
port : le port de communication avec l'imprimante
|
|
"""
|
|
self.hostname=hostname
|
|
self.port=port
|
|
|
|
def cx_open(self):
|
|
"""Ouvre la connexion vers l'imprimante"""
|
|
|
|
if not self.__douille:
|
|
self.__douille = socket.socket(socket.AF_INET, socket.SOCK_STREAM,socket.IPPROTO_TCP)
|
|
self.__douille.connect((self.hostname, self.port))
|
|
#delai d'attente pour la réception des données
|
|
self.__douille.settimeout(10)
|
|
self.__douille.sendall(self.UEL+"@PJL\n")
|
|
|
|
def cx_close(self):
|
|
"""Ferme la connexion vers l'imprimante"""
|
|
|
|
if self.__douille:
|
|
self.__douille.sendall(self.UEL+"\n")
|
|
self.__douille.close()
|
|
self.__douille=None
|
|
|
|
def pjl_command(self,command):
|
|
"""Cette fonction envoie la commande command à l'imprimante
|
|
Elle doit être une commande pjl sans @PJL devant
|
|
|
|
Paramètres :
|
|
command : la commande à envoyer à l'imprimante
|
|
|
|
"""
|
|
|
|
if not self.__douille:
|
|
self.cx_open()
|
|
|
|
command=str(command)
|
|
command="@PJL " + command + "\n"
|
|
self.__douille.sendall(command)
|
|
|
|
#debug
|
|
print command
|
|
|
|
def pjl_read(self, display=0):
|
|
"""Cette fonction lit le retour donné par l'imprimante
|
|
Elle retourne un message commençant par \"ERREUR :\" en
|
|
cas d'échec
|
|
Elle affiche le message si la variable display est vraie
|
|
"""
|
|
|
|
if not self.__douille:
|
|
return "ERREUR : la connexion vers l'imprimante n'est pas ouverte"
|
|
message=""
|
|
caract=' '
|
|
while caract:
|
|
try:
|
|
caract=self.__douille.recv(1)
|
|
message+=caract
|
|
except:
|
|
caract=''
|
|
message+='\n'
|
|
if display:
|
|
print message
|
|
return message
|
|
|
|
def write_file(self,filename):
|
|
"""Cette fonction envoie un fichier à l'imprimante.
|
|
Elle est utile pour envoyer une série de commande ou un fichier
|
|
postscript.
|
|
|
|
Arguments :
|
|
filename : nom du fichier à envoyer
|
|
"""
|
|
|
|
if not self.__douille:
|
|
return "ERREUR : la connexion vers l'imprimante n'est pas ouverte"
|
|
|
|
fichier=open(filename)
|
|
self.__douille.sendall(fichier.read())
|
|
fichier.close()
|
|
|
|
def write_postscript(self,filename, name, display):
|
|
"""Cette fonction envoie un fichier postscript à l'imprimante.
|
|
Elle envoie avant le ENTER LANGUAGE et le EOJ a la fin.
|
|
|
|
Arguments :
|
|
filename : nom du fichier à envoyer
|
|
name : le nom du job
|
|
display : ce qu'on met sur l'afficheur
|
|
"""
|
|
if not self.__douille:
|
|
return "ERREUR : la connexion vers l'imprimante n'est pas ouverte"
|
|
self.pjl_command('JOB DISPLAY=\"%s\" NAME=\"%s\"' % (display,name))
|
|
self.pjl_command('ENTER LANGUAGE = POSTSCRIPT ')
|
|
self.write_file(filename)
|
|
self.__douille.sendall(self.UEL+"@PJL EOJ NAME=\"%s\"\n" % (name))
|
|
|
|
|
|
def __del__(self):
|
|
"""Destructeur : ferme la connexion"""
|
|
self.cx_close()
|
|
|