Merge pull request #14755 from bcoca/pause_nohup_fix

avoid issues when stdin is a closed file
pull/14767/head
Matt Davis 9 years ago
commit 0ab29f573a

@ -120,7 +120,13 @@ class ActionModule(ActionBase):
# save the attributes on the existing (duped) stdin so # save the attributes on the existing (duped) stdin so
# that we can restore them later after we set raw mode # that we can restore them later after we set raw mode
fd = None
try:
fd = self._connection._new_stdin.fileno() 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): if isatty(fd):
old_settings = termios.tcgetattr(fd) old_settings = termios.tcgetattr(fd)
tty.setraw(fd) tty.setraw(fd)
@ -128,15 +134,15 @@ class ActionModule(ActionBase):
# flush the buffer to make sure no previous key presses # flush the buffer to make sure no previous key presses
# are read in below # are read in below
termios.tcflush(self._connection._new_stdin, termios.TCIFLUSH) termios.tcflush(self._connection._new_stdin, termios.TCIFLUSH)
while True: while True:
try: try:
if fd is not None:
key_pressed = self._connection._new_stdin.read(1) key_pressed = self._connection._new_stdin.read(1)
if key_pressed == '\x03': if key_pressed == '\x03':
raise KeyboardInterrupt raise KeyboardInterrupt
if not seconds: 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") display.warning("Not waiting from prompt as stdin is not interactive")
break break
# read key presses and act accordingly # read key presses and act accordingly
@ -154,6 +160,7 @@ class ActionModule(ActionBase):
else: else:
raise AnsibleError('user requested abort!') raise AnsibleError('user requested abort!')
except AnsibleTimeoutExceeded: except AnsibleTimeoutExceeded:
# this is the exception we expect when the alarm signal # this is the exception we expect when the alarm signal
# fires, so we simply ignore it to move into the cleanup # fires, so we simply ignore it to move into the cleanup

Loading…
Cancel
Save