nmbug: Respect 'expect' in _spawn(..., wait=True)

Fixing a bug from 7f2cb3be (nmbug: Translate to Python, 2014-10-03).
The bug had no direct impact though, because none of the wait=True
callers were setting expect.

Also add expected codes to the debug messages, to help log readers
understand why nonzero exits are occasionally accepted.
This commit is contained in:
W. Trevor King 2017-10-10 15:49:49 -07:00 committed by David Bremner
parent 040c3236af
commit e263c5b1f9

View file

@ -169,8 +169,9 @@ class _SubprocessContextManager(object):
stream.close() stream.close()
setattr(self._process, name, None) setattr(self._process, name, None)
status = self._process.wait() status = self._process.wait()
_LOG.debug('collect {args} with status {status}'.format( _LOG.debug(
args=self._args, status=status)) 'collect {args} with status {status} (expected {expect})'.format(
args=self._args, status=status, expect=self._expect))
if status not in self._expect: if status not in self._expect:
raise SubprocessError(args=self._args, status=status) raise SubprocessError(args=self._args, status=status)
@ -211,13 +212,14 @@ def _spawn(args, input=None, additional_env=None, wait=False, stdin=None,
input = input.encode(encoding) input = input.encode(encoding)
(stdout, stderr) = p.communicate(input=input) (stdout, stderr) = p.communicate(input=input)
status = p.wait() status = p.wait()
_LOG.debug('collect {args} with status {status}'.format( _LOG.debug(
args=args, status=status)) 'collect {args} with status {status} (expected {expect})'.format(
args=args, status=status, expect=expect))
if stdout is not None: if stdout is not None:
stdout = stdout.decode(encoding) stdout = stdout.decode(encoding)
if stderr is not None: if stderr is not None:
stderr = stderr.decode(encoding) stderr = stderr.decode(encoding)
if status: if status not in expect:
raise SubprocessError( raise SubprocessError(
args=args, status=status, stdout=stdout, stderr=stderr) args=args, status=status, stdout=stdout, stderr=stderr)
return (status, stdout, stderr) return (status, stdout, stderr)