[Python-Dev] [Python-checkins] cpython (3.2): Issue #12400: runtest() truncates the StringIO stream before a new test
Victor Stinner
victor.stinner at haypocalc.com
Wed Jun 29 20:05:27 CEST 2011
Le mercredi 29 juin 2011 à 13:05 -0400, Terry Reedy a écrit :
> On 6/29/2011 11:30 AM, victor.stinner wrote:
>
> > summary:
> > Issue #12400: runtest() truncates the StringIO stream before a new test
> >
> > files:
> > Lib/test/regrtest.py | 1 +
> > 1 files changed, 1 insertions(+), 0 deletions(-)
> >
> >
> > diff --git a/Lib/test/regrtest.py b/Lib/test/regrtest.py
> > --- a/Lib/test/regrtest.py
> > +++ b/Lib/test/regrtest.py
> > @@ -793,6 +793,7 @@
> > if runtest.stringio is None:
> > runtest.stringio = io.StringIO()
> > stream = runtest.stringio
> > + stream.truncate(0)
>
> You *MUST* seek to 0 to reset the file position, which I presume is your
> intention. 'Resize' does not mean what you probably think is does (and
> what I thought once either ;-).
>
> "truncate(size=None)
> Resize the stream to the given size in bytes (or the current position if
> size is not specified). The current stream position isn’t changed."
>
> >>> s=io.StringIO()
> >>> s.write('abc')
> 3
> >>> s.truncate(0)
> 0
> >>> s.tell()
> 3
> >>> s.write('abc')
> 3
> >>> s.getvalue()
> '\x00\x00\x00abc'
Oh crap. I read _pyio source code and .truncate(0) was looking for the
right method to "reset" a StringIO. I tried .truncate(0) in a terminal,
but the zeros ('\x00') are "hidden". sys.stdout.write("\0") doesn't
print anything in my Linux terminal.
Fixed by commit 450209efe272, thank you.
Victor
More information about the Python-Dev
mailing list