[Python-de] Neuer executer für *n*x
Pierre Bernhardt
pierre at starcumulus.owl.de
Mon Feb 7 06:44:50 CET 2005
Pierre Bernhardt schrieb:
Hallo,
ich habe erst mal eine neue Klasse konstruiert, mit der man
Pipes als FIFO zwischenpuffern kann.
Das ganze ist relativ kurz gehalten und habe es deswegen
kurzerhand direkt in die Mail kopiert, damit man ggf.
dazu einzelne Punkte kritisieren kann. In jedem Fall ist
es garantiert Verbesserungswürdig(Python 2.4 kann ich leider
nicht einstzen):
#!/usr/bin/python
# -*- coding: utf8 -*-
from __future__ import division, generators
from time import sleep
from Queue import Queue, Full, Empty
from threading import Thread
class Wache(Queue, Thread):
"""Die Klasse überwacht einen filedescriptor und puffert
den Inhalt in einer methodenbasierten Queue, das ganze in einem
eigenen Thread, damit es zu (hoffentlich) keinen Deadlocks kommt."""
def __init__(self, fd, readmode = True ,maxsize = 0):
"""fd entspricht dem Dateidescriptor zur Datei.
readmode ist als Parameter gedacht, um mitzuteilen,
ob der fd gelesen werden soll (default)"""
Queue.__init__(self, maxsize)
Thread.__init__(self)
self.readmode = readmode
self.fd = fd
self.end = False
def run(self):
"""Threadschleife, um die Daten vom fd in die queue oder
den Queueinhalt in den FD zu schreiben (FIFO-like)"""
while not self.end:
sleep(1)
# Schreibe kompletten FD-Inhalt in Queue
if not self.full() and self.readmode:
data = self.fd.read()
#print data
if not data == None:
#print "Write in Queue from", self.fd, data
self.writeq(data)
# Schreibe kompletten Queueinhalt in FD
elif not self.empty() and not self.readmode:
print "Read from Queue to", self.fd
self.fd.write(self.readq())
def writeq(self, data):
"""Schreibt data in die Queue. GGf. wird gewartet, wenn
die Queue voll ist"""
while self.full():
sleep(1)
pass
if data:
self.put_nowait(data)
def readq(self):
"""Liest Queueinhalt und gibt Ihn zurück. Gibt false zurück
wenn kein Item vorhanden."""
if not self.empty():
return self.get_nowait()
def quit(self):
self.fd.close()
self.end = True
Ich seh gerade, mir fehlt noch, das das Objekt nach beenden
zerstört wird:-)
MfG...
Pierre
PS: Ich habe letzten auf dem Forum etwas gelesen, dass
jemand dort ein neues Modul gebaut hat, mit dem Streams
in FD's abgebildet werden können.
Vielleicht kann ich das Später als Ersatz verwenden.
-------------- nächster Teil --------------
Ein Dateianhang mit Binärdaten wurde abgetrennt...
Dateiname : signature.asc
Dateityp : application/pgp-signature
Dateigröße : 294 bytes
Beschreibung: OpenPGP digital signature
URL : http://starship.python.net/pipermail/python-de/attachments/20050207/b3f6a28b/signature-0001.pgp