Source code for pyaota.util.command

# Author: Cameron F. Abrams, <cfa22@drexel.edu>
"""
Simple command runner
"""
import subprocess
import logging

logger = logging.getLogger(__name__)

[docs] class Command: def __init__(self, command: str, ignore_codes: list[int] = [], **options): """ Initializes the Command instance. Parameters ---------- command : str the base command to run ignore_codes : list of int, optional list of return codes to ignore (default is empty list) options : dict command-line options as key-value pairs """ self.command = command self.ignore_codes = ignore_codes self.options = options self.c = f'{self.command} ' + ' '.join([f'-{k} {v}' for k, v in self.options.items()])
[docs] def run(self): """ Runs the command and returns the output and error messages. """ process = subprocess.Popen(self.c, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) out_bytes, err_bytes = process.communicate() out = out_bytes.decode("utf-8", errors="replace") err = err_bytes.decode("utf-8", errors="replace") if process.returncode != 0 and not process.returncode in self.ignore_codes: raise subprocess.SubprocessError(f'Command "{self.c}" failed with returncode {process.returncode}') return out, err