ドキュメントを検索して検索しましたが、StringIOオブジェクトのブロックについては何も言及されていません。StringIOの読み込みをブロックする方法はありますか
StringIOを単純に囲むようなファイル形式のオブジェクトを作成することができましたが、ブロックするにはどうすればよいでしょうか?私が知っている唯一の方法は、利用可能なデータがあるまでwhileループとtime.sleep(0.1)を使用することです。
ドキュメントを検索して検索しましたが、StringIOオブジェクトのブロックについては何も言及されていません。StringIOの読み込みをブロックする方法はありますか
StringIOを単純に囲むようなファイル形式のオブジェクトを作成することができましたが、ブロックするにはどうすればよいでしょうか?私が知っている唯一の方法は、利用可能なデータがあるまでwhileループとtime.sleep(0.1)を使用することです。
import os
r, w = os.pipe()
r, w = os.fdopen(r, 'rb'), os.fdopen(w, 'wb')
このパイプ機能は悲しいことにv私はそれを後で見つけたので、ドキュメントで明らかになった。
ありませんが、それはこのノートが
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
の実装を見てかなり明白ですとにかく
正確にそれをブロックするものは何ですか?あなたは文字列から読んでいる。 – kindall
StringIOはファイルのようなオブジェクトなので、両方とも '' EOFと.close()メソッドを持ち、他のすべてのread()の例外を発生させます。 EOF – Wessie
おそらく代わりにパイプが必要です。 –