2012-03-29 13 views
0

Ich habe die Dokumentation durchsucht und gesucht, aber es wurde nichts über das Blockieren von StringIO-Objekten gesagt.Gibt es eine Möglichkeit, das Blockieren von StringIO zu blockieren

Ich könnte mein eigenes dateiähnliches Objekt erstellen, das einfach nur StringIO umschließt, aber wie ist es am besten, es zu blockieren? Der einzige Weg, den ich kenne, ist eine while-Schleife und ein time.sleep (0.1), bis Daten verfügbar sind.

+1

Was genau würde es blockieren? Sie lesen von einer Zeichenfolge. – kindall

+0

StringIO ist ein dateiähnliches Objekt, also hat es sowohl eine '' EOF- als auch eine .close() -Methode, die alle anderen read() -Elemente eine Ausnahme auslöst. Ich möchte, dass EOF nur blockiert statt zurückkehrt ein EOF. – Wessie

+0

Vielleicht möchten Sie stattdessen eine Leitung. –

Antwort

3
import os 

r, w = os.pipe() 
r, w = os.fdopen(r, 'rb'), os.fdopen(w, 'wb') 

Funktioniert genau so, wie ich brauchte, diese Rohrfunktion ist leider nicht v Es ist offensichtlich in der Dokumentation, so dass ich es erst später gefunden habe.

0

Nein, es ist ziemlich offensichtlich, Blick auf die Umsetzung der read()

def read(self, n = -1): 
    """Read at most size bytes from the file 
    (less if the read hits EOF before obtaining size bytes). 

    If the size argument is negative or omitted, read all data until EOF 
    is reached. The bytes are returned as a string object. An empty 
    string is returned when EOF is encountered immediately. 
    """ 
    _complain_ifclosed(self.closed) 
    if self.buflist: 
     self.buf += ''.join(self.buflist) 
     self.buflist = [] 
    if n is None or n < 0: 
     newpos = self.len 
    else: 
     newpos = min(self.pos+n, self.len) 
    r = self.buf[self.pos:newpos] 
    self.pos = newpos 
    return r 

Es kann auch an der Spitze der Datei diese Note ist

Notes: 
- Using a real file is often faster (but less convenient). 

So können Sie besser dran sein, eine echte Datei trotzdem

Verwandte Themen