Merge pull request #14755 from bcoca/pause_nohup_fix
avoid issues when stdin is a closed file
This commit is contained in:
commit
0ab29f573a
1 changed files with 19 additions and 12 deletions
|
@ -120,23 +120,29 @@ class ActionModule(ActionBase):
|
|||
|
||||
# save the attributes on the existing (duped) stdin so
|
||||
# that we can restore them later after we set raw mode
|
||||
fd = self._connection._new_stdin.fileno()
|
||||
if isatty(fd):
|
||||
old_settings = termios.tcgetattr(fd)
|
||||
tty.setraw(fd)
|
||||
|
||||
# flush the buffer to make sure no previous key presses
|
||||
# are read in below
|
||||
termios.tcflush(self._connection._new_stdin, termios.TCIFLUSH)
|
||||
fd = None
|
||||
try:
|
||||
fd = self._connection._new_stdin.fileno()
|
||||
except ValueError:
|
||||
# someone is using a closed file descriptor as stdin
|
||||
pass
|
||||
if fd is not None:
|
||||
if isatty(fd):
|
||||
old_settings = termios.tcgetattr(fd)
|
||||
tty.setraw(fd)
|
||||
|
||||
# flush the buffer to make sure no previous key presses
|
||||
# are read in below
|
||||
termios.tcflush(self._connection._new_stdin, termios.TCIFLUSH)
|
||||
while True:
|
||||
try:
|
||||
key_pressed = self._connection._new_stdin.read(1)
|
||||
if key_pressed == '\x03':
|
||||
raise KeyboardInterrupt
|
||||
if fd is not None:
|
||||
key_pressed = self._connection._new_stdin.read(1)
|
||||
if key_pressed == '\x03':
|
||||
raise KeyboardInterrupt
|
||||
|
||||
if not seconds:
|
||||
if not isatty(fd):
|
||||
if fd is None or not isatty(fd):
|
||||
display.warning("Not waiting from prompt as stdin is not interactive")
|
||||
break
|
||||
# read key presses and act accordingly
|
||||
|
@ -154,6 +160,7 @@ class ActionModule(ActionBase):
|
|||
else:
|
||||
raise AnsibleError('user requested abort!')
|
||||
|
||||
|
||||
except AnsibleTimeoutExceeded:
|
||||
# this is the exception we expect when the alarm signal
|
||||
# fires, so we simply ignore it to move into the cleanup
|
||||
|
|
Loading…
Reference in a new issue