mirror of
https://github.com/python/cpython.git
synced 2026-07-30 05:36:27 -04:00
gh-90092: Fix test_curses when stdin is write-only (e.g. under nohup) (GH-153420)
newterm() needs a readable input fd, but nohup can leave stdin write-only. Fall back to the output fd, as already done when stdin has no fileno. Co-authored-by: Claude Opus 4.8 <[email protected]>
This commit is contained in:
co-authored by
Claude Opus 4.8
parent
dd8739a35b
commit
eacb85a2b2
@@ -29,6 +29,9 @@ try:
|
||||
except ImportError:
|
||||
pass
|
||||
|
||||
# Only reachable once curses imported, so the platform has fcntl too.
|
||||
import fcntl
|
||||
|
||||
def requires_curses_func(name):
|
||||
return unittest.skipUnless(hasattr(curses, name),
|
||||
'requires curses.%s' % name)
|
||||
@@ -164,6 +167,10 @@ class TestCurses(unittest.TestCase):
|
||||
# ScreenTests run newterm()/set_term() in the same process.
|
||||
try:
|
||||
infd = sys.__stdin__.fileno()
|
||||
if fcntl.fcntl(infd, fcntl.F_GETFL) & os.O_ACCMODE == os.O_WRONLY:
|
||||
# newterm() needs a readable input fd; a write-only stdin
|
||||
# (as nohup leaves for a backgrounded run) fails with EINVAL.
|
||||
infd = stdout_fd
|
||||
except (AttributeError, ValueError, OSError):
|
||||
infd = stdout_fd
|
||||
self.screen = curses.newterm(term, stdout_fd, infd)
|
||||
|
||||
Reference in New Issue
Block a user