Hello,
On Thu, Jun 17, 2004 at 09:42:56PM -0700, David Bear wrote:
> I didn't see any python attached?
sorry - I was disturbed while writing and missed that afterwards.
See below.
Greetings
Hermann
>
> On Thu, Jun 17, 2004 at 11:52:03AM +0200, Hermann Lauer wrote:
> > Hello,
> >
> > On Thu, Jun 17, 2004 at 10:17:20AM +0200, Helmut Jarausch wrote:
> > > Hi,
> > >
> > > I am a fan of LPRng and I want to keep it.
> > > Now, recent releases of Maple (9.0 and 9.5) do require CUPS
> > > to be installed on your system.
> > > Since I don't want to switch to CUPS I am curious if there
> > > is an 'emulator' which software like Maple recognizes and
> > > which passes all files/inquiries to LPRng.
> > >
> > > If that's not already done and not too difficult I'd like to
> > > write such a tool in Python (or Perl)
> > > I'd just need some pointers on what to do for this.
> >
> > we here are using ifhp as a backend for the CUPS spooler
> > so thats somekind of the other way you are asking for.
> > We did that because the socket backend lacks some nice features like
> > actions on error codes and setting the Display - did
> > anybody know something about improved backends ?
> >
> > But I included the python code just to give you an idea.
> >
> > Greetings
> > Hermann
> >
> > >
> > > Many thanks for any hints,
> > >
> > > Helmut Jarausch
> > --
> > Netzwerkadministration/Zentrale Dienste, Interdiziplinaeres
> > Zentrum fuer wissenschaftliches Rechnen der Universitaet Heidelberg
> > IWR; INF 368; 69120 Heidelberg; Tel: (06221)54-8236 Fax: -5224
> > Email: [EMAIL PROTECTED]
> >
> > -----------------------------------------------------------------------------
> > YOU MUST BE A LIST MEMBER IN ORDER TO POST TO THE LPRNG MAILING LIST
> > The address you post from MUST be your subscription address
> >
> > If you need help, send email to [EMAIL PROTECTED] (or lprng-requests
> > or lprng-digest-requests) with the word 'help' in the body. For the impatient,
> > to subscribe to a list with name LIST, send mail to [EMAIL PROTECTED]
> > with: | example:
> > subscribe LIST <mailaddr> | subscribe lprng-digest [EMAIL PROTECTED]
> > unsubscribe LIST <mailaddr> | unsubscribe lprng [EMAIL PROTECTED]
> >
> > If you have major problems, send email to [EMAIL PROTECTED] with the word
> > LPRNGLIST in the SUBJECT line.
> > -----------------------------------------------------------------------------
>
> --
> David Bear
> phone: 480-965-8257
> fax: 480-965-9189
> College of Public Programs/ASU
> Wilson Hall 232
> Tempe, AZ 85287-0803
> "Beware the IP portfolio, everyone will be suspect of trespassing"
--
Netzwerkadministration/Zentrale Dienste, Interdiziplinaeres
Zentrum fuer wissenschaftliches Rechnen der Universitaet Heidelberg
IWR; INF 368; 69120 Heidelberg; Tel: (06221)54-8236 Fax: -5224
Email: [EMAIL PROTECTED]
#!/usr/bin/python
#
# (C) 2003 Hermann Lauer
# Could be distributed under the GPL
# $Id: ifhp,v 1.11 2003/12/16 10:49:15 hlauer Exp $
#
# Usage: ifhp job-id user title copies options [filename]
import os, sys, string, time, signal
try:
printer=os.environ['PRINTER']
except KeyError:
printer='UNKNOWN'
logf=open('/tmp/ifhp_%s.log'%(printer),'w')
logf.write(str(sys.argv)+"\n")
logf.write(str(os.environ)+"\n")
logf.flush()
# called with no args
if len(sys.argv)<6:
sys.stdout.write('network ifhp "Unknown" "ifhp device printing"\n')
sys.exit(0)
#send child a signal too, which will eventually terminate the child and close the pipe,
# so we will exit too
def signalhand(signum,frame):
os.kill(cpid,signum)
sys.stderr.write("ERROR: Got/Send signal %i\n"%signum)
sys.stderr.flush()
logf.write("ERROR: Got/Send signal %i\n"%signum)
logf.flush()
jobid=sys.argv[1]
jobuser=sys.argv[2]
jobname=sys.argv[3]
jobcopies=sys.argv[4]
joboptions=sys.argv[5]
ifhpopt="-Ttrace"
try:
ident,model,device=string.split(os.environ['DEVICE_URI'],':',2)
except KeyError:
model=None
device=None
if model: ifhpopt=ifhpopt+",model=%s"%(model)
if device: ifhpopt=ifhpopt+",dev=%s"%(device)
if os.environ.has_key('TMPDIR') and os.environ['TMPDIR']:
ifhpopt=ifhpopt+",tempfile=%s"%(os.environ['TMPDIR'])
cmd=["/usr/libexec/filters/ifhp",ifhpopt,"-s","/tmp/ifhp_%s.status"%(printer)]
if jobuser: cmd=cmd+["-n",jobuser]
if jobname: cmd=cmd+["-J",jobname]
cmd=cmd+["-t",time.strftime("%H:%M:%S",time.localtime(time.time()))]
#do pipe reading
c2pread, c2pwrite = os.pipe()
signal.signal(signal.SIGTERM, signalhand) #catch signal and kill child first
cpid = os.fork()
if cpid == 0:
# Child
os.close(c2pread) # we only write
logf.close()
if len(sys.argv)>6: #open file and connect to stdin
fi=open(sys.argv[6],"r")
os.dup2(fi.fileno(), 0)
os.dup2(c2pwrite, 2) #connect stderr to pipe
os.execvp(cmd[0], cmd)
#parent
# catch if anything goes wrong
try:
os.close(c2pwrite) # we read only
f=os.fdopen(c2pread, 'r', 0) # 0 means no buffering
meld={"main:":None,
"Do_sync:":"INFO",
"Send_job:":"INFO",
"Check_pagecount:":None,
"Check_device_status:":"INFO",
"Do_pagecount:":None,
"Do_accounting:":None,
"Process_job:":"INFO",
"Do_waitend:":"INFO",
"Pr_status:":"ERROR",
"Link_open:":"ERROR"
}
while 1:
res=f.readline()
if not res: break
stl=string.split(res," ",4)
logf.write(string.join(stl,"_"))
try:
level=meld[stl[3]]
if level:
logf.write("%s: %s"%(level,stl[4]))
sys.stderr.write("%s: %s"%(level,stl[4]))
sys.stderr.flush()
except IndexError:
pass
except KeyError:
logf.write(str(stl)+"\n")
sys.stderr.write(str(stl)+"\n")
logf.flush()
except:
logf.write("EXCEPTION: %s\n"%str(sys.exc_info()))
logf.write("RESULT: %s, %s\n"%(str(f.close()),str(os.waitpid(cpid, os.WNOHANG))))
logf.close()