Spaces:
Paused
Paused
| class ProcessWrapper(): | |
| """Wraps the subprocess popen method and provides logging.""" | |
| def __init__(self): | |
| pass | |
| 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 |