On Mon, Oct 15, 2018 at 08:05:02PM -0400, Cleber Rosa wrote: > > > On 10/15/18 5:17 PM, Eduardo Habkost wrote: > > On Mon, Oct 15, 2018 at 04:14:52PM +0200, Max Reitz wrote: > >> There are two imports that need to be modified when running the iotests > >> under Python 3: One is StringIO, which no longer exists; instead, the > >> StringIO class comes from the io module, so import it from there. The > >> other is the ConfigParser, which has just been renamed to configparser. > >> > >> Signed-off-by: Max Reitz <mre...@redhat.com> > >> --- > >> tests/qemu-iotests/iotests.py | 8 ++++++-- > >> tests/qemu-iotests/nbd-fault-injector.py | 7 +++++-- > >> 2 files changed, 11 insertions(+), 4 deletions(-) > >> > >> diff --git a/tests/qemu-iotests/iotests.py b/tests/qemu-iotests/iotests.py > >> index 7ca94e9278..a64ea90fb4 100644 > >> --- a/tests/qemu-iotests/iotests.py > >> +++ b/tests/qemu-iotests/iotests.py > >> @@ -683,13 +683,17 @@ def main(supported_fmts=[], > >> supported_oses=['linux'], supported_cache_modes=[], > >> > >> # We need to filter out the time taken from the output so that > >> qemu-iotest > >> # can reliably diff the results against master output. > >> - import StringIO > >> + if sys.version_info.major >= 3: > >> + from io import StringIO > >> + else: > >> + from StringIO import StringIO > > > > Considering that io.StringIO exists on Python 2.7, a comment > > explaining why exactly it doesn't work would be nice. > > > > Another possibility, that I find self explanatory: > > import io > > if sys.version_info.major >= 3: > output = io.StringIO() > else: > output = io.BytesIO()
Looks nice and clean. But I'm not sure all output sent to `output` when running with Python 2 will be byte strings. What if `unittest.TextTestRunner` tries to write unicode strings to `output`? -- Eduardo