mirror of
https://github.com/python/cpython.git
synced 2025-11-25 04:34:37 +00:00
[3.14] gh-140482: Preserve and restore stty echo as a test environment (GH-140519) (#140562)
gh-140482: Preserve and restore `stty echo` as a test environment (GH-140519)
(cherry picked from commit b3c713a0af)
gh-140482: Restore `stty echo` as a test environment
Co-authored-by: Barry Warsaw <barry@python.org>
This commit is contained in:
parent
11b5e0b9c2
commit
7545ea6b3a
2 changed files with 27 additions and 0 deletions
|
|
@ -9,6 +9,13 @@ from test.support import os_helper
|
|||
|
||||
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 @@ class saved_test_environment:
|
|||
'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 @@ class saved_test_environment:
|
|||
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('.', '_')
|
||||
|
|
|
|||
|
|
@ -0,0 +1 @@
|
|||
Preserve and restore the state of ``stty echo`` as part of the test environment.
|
||||
Loading…
Add table
Add a link
Reference in a new issue