StringIO に書き込んだ文字列を取得する方法って rewind とかして read しかないですか?
いちいち sio.rewind; str = sio.read って書くのめどいです