https://github.com/python/cpython/commit/b3c713a0af5f5c4b5704d8019a893a1b70eba941
commit: b3c713a0af5f5c4b5704d8019a893a1b70eba941
branch: main
author: Barry Warsaw <[email protected]>
committer: warsaw <[email protected]>
date: 2025-10-24T11:07:08-07:00
summary:
gh-140482: Preserve and restore `stty echo` as a test environment (#140519)
gh-140482: Restore `stty echo` as a test environment
files:
A Misc/NEWS.d/next/Tests/2025-10-23-16-39-49.gh-issue-140482.ZMtyeD.rst
M Lib/test/libregrtest/save_env.py
diff --git a/Lib/test/libregrtest/save_env.py b/Lib/test/libregrtest/save_env.py
index 4cf1a075b30013..138465012a252c 100644
--- a/Lib/test/libregrtest/save_env.py
+++ b/Lib/test/libregrtest/save_env.py
@@ -9,6 +9,13 @@
from .utils import print_warning
+# Import termios to save and restore terminal echo. This is only available on
+# Unix, and it's fine if the module can't be found.
+try:
+ import termios # noqa: F401
+except ModuleNotFoundError:
+ pass
+
class SkipTestEnvironment(Exception):
pass
@@ -65,6 +72,7 @@ def __init__(self, test_name, verbose, quiet, *, pgo):
'shutil_archive_formats', 'shutil_unpack_formats',
'asyncio.events._event_loop_policy',
'urllib.requests._url_tempfiles', 'urllib.requests._opener',
+ 'stty_echo',
)
def get_module(self, name):
@@ -292,6 +300,24 @@ def restore_warnings_showwarning(self, fxn):
warnings = self.get_module('warnings')
warnings.showwarning = fxn
+ def get_stty_echo(self):
+ termios = self.try_get_module('termios')
+ if not os.isatty(fd := sys.__stdin__.fileno()):
+ return None
+ attrs = termios.tcgetattr(fd)
+ lflags = attrs[3]
+ return bool(lflags & termios.ECHO)
+ def restore_stty_echo(self, echo):
+ termios = self.get_module('termios')
+ attrs = termios.tcgetattr(fd := sys.__stdin__.fileno())
+ if echo:
+ # Turn echo on.
+ attrs[3] |= termios.ECHO
+ else:
+ # Turn echo off.
+ attrs[3] &= ~termios.ECHO
+ termios.tcsetattr(fd, termios.TCSADRAIN, attrs)
+
def resource_info(self):
for name in self.resources:
method_suffix = name.replace('.', '_')
diff --git
a/Misc/NEWS.d/next/Tests/2025-10-23-16-39-49.gh-issue-140482.ZMtyeD.rst
b/Misc/NEWS.d/next/Tests/2025-10-23-16-39-49.gh-issue-140482.ZMtyeD.rst
new file mode 100644
index 00000000000000..20747ad7f113ec
--- /dev/null
+++ b/Misc/NEWS.d/next/Tests/2025-10-23-16-39-49.gh-issue-140482.ZMtyeD.rst
@@ -0,0 +1 @@
+Preserve and restore the state of ``stty echo`` as part of the test
environment.
_______________________________________________
Python-checkins mailing list -- [email protected]
To unsubscribe send an email to [email protected]
https://mail.python.org/mailman3//lists/python-checkins.python.org
Member address: [email protected]