Skip to content

Commit

Permalink
fix TimeoutExpiredError at the end of processes (i.e. process is fini…
Browse files Browse the repository at this point in the history
…shed during call to Popen.communicate, but was not finished during the call to Popen.poll)
  • Loading branch information
dkuegler committed Aug 14, 2023
1 parent d02cec4 commit 2564ab2
Showing 1 changed file with 10 additions and 6 deletions.
16 changes: 10 additions & 6 deletions FastSurferCNN/utils/run_tools.py
Original file line number Diff line number Diff line change
Expand Up @@ -40,13 +40,16 @@ class Popen(subprocess.Popen):
"""Extension of subprocess.Popen for convenience."""

def messages(self, timeout: float) -> Generator[MessageBuffer, None, None]:

from subprocess import TimeoutExpired
while self.poll() is None:
stdout, stderr = self.communicate(timeout=timeout)
yield MessageBuffer(
out=stdout if stdout else b'',
err=stderr if stderr else b'',
retcode=self.returncode)
try:
stdout, stderr = self.communicate(timeout=timeout)
yield MessageBuffer(
out=stdout if stdout else b'',
err=stderr if stderr else b'',
retcode=self.returncode)
except TimeoutExpired:
pass

_stdout = b'' if self.stdout is None or self.stdout.closed else self.stdout.read()
_stderr = b'' if self.stderr is None or self.stderr.closed else self.stderr.read()
Expand All @@ -64,6 +67,7 @@ def next_message(self, timeout: float) -> MessageBuffer:
out=stdout if stdout else b'',
err=stderr if stderr else b'',
retcode=self.returncode)

else:
_stdout = b'' if self.stdout is None or self.stdout.closed else self.stdout.read()
_stderr = b'' if self.stderr is None or self.stderr.closed else self.stderr.read()
Expand Down

0 comments on commit 2564ab2

Please sign in to comment.