2012-03-29 8 views
0

ドキュメントを検索して検索しましたが、StringIOオブジェクトのブロックについては何も言及されていません。StringIOの読み込みをブロックする方法はありますか

StringIOを単純に囲むようなファイル形式のオブジェクトを作成することができましたが、ブロックするにはどうすればよいでしょうか?私が知っている唯一の方法は、利用可能なデータがあるまでwhileループとtime.sleep(0.1)を使用することです。

+1

正確にそれをブロックするものは何ですか?あなたは文字列から読んでいる。 – kindall

+0

StringIOはファイルのようなオブジェクトなので、両方とも '' EOFと.close()メソッドを持ち、他のすべてのread()の例外を発生させます。 EOF – Wessie

+0

おそらく代わりにパイプが必要です。 –

答えて

3
import os 

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

このパイプ機能は悲しいことにv私はそれを後で見つけたので、ドキュメントで明らかになった。

0

ありませんが、それはこのノートが

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

だから、あなたが本当のファイルを使用したほうが良いかもしれファイルの先頭にもあります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 

の実装を見てかなり明白ですとにかく

関連する問題