From efefc2b0389ed33d61c4bcb5103a2155e5d1d5b6 Mon Sep 17 00:00:00 2001 From: Mark Visser Date: Thu, 7 Jan 2016 13:41:23 -0500 Subject: [PATCH] handle EINTR by retrying waitpid (bug in python < 3.5) --- sh.py | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/sh.py b/sh.py index fb0f5fe7..7576ff4e 100644 --- a/sh.py +++ b/sh.py @@ -49,6 +49,7 @@ from functools import partial import inspect from contextlib import contextmanager +import errno from locale import getpreferredencoding DEFAULT_ENCODING = getpreferredencoding() or "UTF-8" @@ -1598,7 +1599,16 @@ def wait(self): if self.exit_code is None: self.log.debug("exit code not set, waiting on pid") - pid, exit_code = os.waitpid(self.pid, 0) # blocks + while True: + try: + pid, exit_code = os.waitpid(self.pid, 0) # blocks + except OSError as e: + if e.errno == errno.EINTR: + continue + else: + raise + else: + break self.exit_code = handle_process_exit_code(exit_code) else: self.log.debug("exit code already set (%d), no need to wait", self.exit_code)