diff --git a/CHANGELOG b/CHANGELOG index 8e04fc181..e362a23e0 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,3 +1,9 @@ +Changes between 2.4.1 and 2.4.2 +----------------------------------- + +- avoid "IOError: Bad Filedescriptor" on pytest shutdown by not closing + the internal dupped stdout (fix is slightly hand-wavy but work). + Changes between 2.4.0 and 2.4.1 ----------------------------------- diff --git a/_pytest/__init__.py b/_pytest/__init__.py index 1d5eb258a..9ff66d9a3 100644 --- a/_pytest/__init__.py +++ b/_pytest/__init__.py @@ -1,2 +1,2 @@ # -__version__ = '2.4.1' +__version__ = '2.4.2.dev1' diff --git a/_pytest/capture.py b/_pytest/capture.py index 12291a5e3..be3194532 100644 --- a/_pytest/capture.py +++ b/_pytest/capture.py @@ -29,7 +29,7 @@ def pytest_load_initial_conftests(early_config, parser, args, __multicall__): except ValueError: pass early_config.pluginmanager.add_shutdown(teardown) - # make sure logging does not raise exceptions if it is imported + # make sure logging does not raise exceptions at the end def silence_logging_at_shutdown(): if "logging" in sys.modules: sys.modules["logging"].raiseExceptions = False diff --git a/_pytest/terminal.py b/_pytest/terminal.py index e55390a23..db7136ea2 100644 --- a/_pytest/terminal.py +++ b/_pytest/terminal.py @@ -33,20 +33,23 @@ def pytest_addoption(parser): def pytest_configure(config): config.option.verbose -= config.option.quiet + # we try hard to make printing resilient against - # later changes on FD level. (unless capturing is turned off) - stdout = py.std.sys.stdout - capture = config.option.capture != "no" - if capture and hasattr(os, 'dup') and hasattr(stdout, 'fileno'): + # later changes on FD level. (unless capturing is off/sys) + stdout = sys.stdout + if config.option.capture == "fd" and hasattr(os, "dup"): try: newstdout = py.io.dupfile(stdout, buffering=1, encoding=stdout.encoding) except ValueError: pass else: - config._cleanup.append(lambda: newstdout.close()) assert stdout.encoding == newstdout.encoding stdout = newstdout + #we don't close on shutdown because this can + #cause logging to fail on a second close + #(not really clear to me how it happens exactly, though) + #config.pluginmanager.add_shutdown(fin) reporter = TerminalReporter(config, stdout) config.pluginmanager.register(reporter, 'terminalreporter') diff --git a/setup.py b/setup.py index 76a9837f5..dc59be97a 100644 --- a/setup.py +++ b/setup.py @@ -11,7 +11,7 @@ def main(): name='pytest', description='py.test: simple powerful testing with Python', long_description = long_description, - version='2.4.1', + version='2.4.2.dev1', url='http://pytest.org', license='MIT license', platforms=['unix', 'linux', 'osx', 'cygwin', 'win32'],