43 lines
1.2 KiB

class ProcessWrapper():
"""Wraps the subprocess popen method and provides logging."""
def __init__(self):
pass
@staticmethod
def call(*popenargs, **kwargs):
"""Run command with arguments. Wait for command to complete. Sends
output to logging module. The arguments are the same as for the Popen
constructor."""
from subprocess import Popen, PIPE
import logging
logger = logging.getLogger()
kwargs['stdout'] = PIPE
kwargs['stderr'] = PIPE
supressStderr = None
if 'supressStderr' in kwargs:
supressStderr = kwargs['supressStderr']
del kwargs['supressStderr']
p = Popen(*popenargs, **kwargs)
stdout, stderr = p.communicate()
# Decode bytes to string (assume utf-8 encoding)
stdout = stdout.decode("utf-8")
stderr = stderr.decode("utf-8")
if stdout:
for line in stdout.strip().split("\n"):
logger.info(line)
if stderr:
for line in stderr.strip().split("\n"):
if supressStderr:
logger.info(line)
else:
logger.error(line)
return p.returncode