Path: csiph.com!x330-a1.tempe.blueboxinc.net!feeder1.hal-mli.net!feeder.news-service.com!85.214.198.2.MISMATCH!eternal-september.org!feeder.eternal-september.org!.POSTED!not-for-mail From: "Martin P. Hellwig" Newsgroups: comp.lang.python Subject: Re: py3k buffered IO - flush() required between read/write? Date: Wed, 11 May 2011 23:24:46 +0000 Organization: A noiseless patient Spider Lines: 50 Message-ID: References: Mime-Version: 1.0 Content-Type: text/plain; charset=windows-1252; format=flowed Content-Transfer-Encoding: 8bit Injection-Date: Wed, 11 May 2011 22:24:45 +0000 (UTC) Injection-Info: mx02.eternal-september.org; posting-host="DryjObO1+zXLpKq2ViMFlg"; logging-data="9954"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX18c76GuC7CKOM8Lp8KT3lKf" User-Agent: Mozilla/5.0 (X11; U; FreeBSD amd64; en-US; rv:1.9.2.13) Gecko/20110301 Thunderbird/3.1.7 In-Reply-To: Cancel-Lock: sha1:OLW+8+9NatQisw0IJzyF9FvXNlM= Xref: x330-a1.tempe.blueboxinc.net comp.lang.python:5170 On 11/05/2011 19:08, Genstein wrote: > On 11/05/2011 19:24, Terry Reedy wrote: >> writing and reading. If you want others to look at this more, you should >> 1) produce a minimal* example that demonstrates the questionable >> behavior, and 2) show the comparative outputs that raise your question. > > Thanks for a quick response. Perhaps I was being unclear - in py3k, > given the following code and assuming no errors arise: > > > f = open("foo", "w+b") > > f.write(b'test') > > f.seek(0) > > print(f.read(4)) > > What is the printed result supposed to be? > > i) b'test' > ii) never b'test' > iii) platform dependent/undefined/other > > All the best, > > -eg. from: http://docs.python.org/py3k/library/functions.html#open """ open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True)¶ buffering is an optional integer used to set the buffering policy. Pass 0 to switch buffering off (only allowed in binary mode), 1 to select line buffering (only usable in text mode), and an integer > 1 to indicate the size of a fixed-size chunk buffer. When no buffering argument is given, the default buffering policy works as follows: * Binary files are buffered in fixed-size chunks; the size of the buffer is chosen using a heuristic trying to determine the underlying device’s “block size” and falling back on io.DEFAULT_BUFFER_SIZE. On many systems, the buffer will typically be 4096 or 8192 bytes long. * “Interactive” text files (files for which isatty() returns True) use line buffering. Other text files use the policy described above for binary files. """ So given that explanation, and assuming I understand it, I go for option 'iii'. -- mph