scripts/impression/pjl_comm.py
dubost ea296f4f5b On enleve le bourrage a la fin
darcs-hash:20050612103810-c3cc4-030736c39ad73158f60f236a686213f4d04b23b0.gz
2005-06-12 12:38:10 +02:00

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(30)
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()