From e1e3a21b6361e9a91bf44bf33985a5a1ba602496 Mon Sep 17 00:00:00 2001 From: Thomas Sibley Date: Wed, 14 Aug 2024 17:25:40 -0700 Subject: [PATCH] Always line-buffer stderr for consistency across Python versions MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The change in default from block-buffering in ≤3.8 to line-buffering in ≥3.9 made a Cram test output vary between Python versions (and thus fail). I could fix the Cram test various ways, but always line-buffering stderr makes sense because we're exclusively using it for messaging/logging. --- augur/__main__.py | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/augur/__main__.py b/augur/__main__.py index d69eae231..59f89dd8f 100644 --- a/augur/__main__.py +++ b/augur/__main__.py @@ -14,11 +14,21 @@ def main(): # Explicitly enable universal newlines mode so we do the right thing. newline=None, + + # By default, stdout is line-buffered when interactive (e.g. for + # consistent stdio interleaving) but block-buffered when not for (I + # assume) better performance. ) # Apply the above to stderr as well. sys.stderr.reconfigure( errors="backslashreplace", newline=None, + + # Always line-buffer stderr since we only use it for messaging, not + # data output. This is the Python default from 3.9 onwards, but we + # also run on 3.8 where it's not. Be consistent regardless of Python + # version. + line_buffering=True, ) return augur.run( argv[1:] )