diff --git a/lib/ansible/runner/__init__.py b/lib/ansible/runner/__init__.py index 502df176df8..8227083c55a 100644 --- a/lib/ansible/runner/__init__.py +++ b/lib/ansible/runner/__init__.py @@ -507,10 +507,15 @@ class Runner(object): fileno = None try: + self._new_stdin = new_stdin if not new_stdin and fileno is not None: - self._new_stdin = os.fdopen(os.dup(fileno)) - else: - self._new_stdin = new_stdin + try: + self._new_stdin = os.fdopen(os.dup(fileno)) + except: + # couldn't dupe stdin, most likely because it's + # not a valid file descriptor, so we just rely on + # using the one that was passed in + pass exec_rc = self._executor_internal(host, new_stdin) if type(exec_rc) != ReturnData: @@ -1094,10 +1099,15 @@ class Runner(object): workers = [] for i in range(self.forks): + new_stdin = None if fileno is not None: - new_stdin = os.fdopen(os.dup(fileno)) - else: - new_stdin = None + try: + new_stdin = os.fdopen(os.dup(fileno)) + except: + # couldn't dupe stdin, most likely because it's + # not a valid file descriptor, so we just rely on + # using the one that was passed in + pass prc = multiprocessing.Process(target=_executor_hook, args=(job_queue, result_queue, new_stdin)) prc.start()