symconf/symconf/runner.py

62 lines
1.5 KiB
Python

import stat
import subprocess
from pathlib import Path
from colorama import Fore, Back, Style
from symconf.util import printc, color_text
class Runner:
def run_script(
self,
script: str | Path,
):
script_path = Path(script)
if script_path.stat().st_mode & stat.S_IXUSR == 0:
print(
color_text("", Fore.BLUE),
color_text(
f' > script "{script_path.name}" missing execute permissions, skipping',
Fore.RED + Style.DIM
)
)
return
print(
color_text("", Fore.BLUE),
color_text(
f' > running script "{script_path.name}"',
Fore.BLUE
)
)
output = subprocess.check_output(str(script_path), shell=True)
if output:
fmt_output = output.decode().strip().replace(
'\n',
f'\n{Fore.BLUE}{Style.NORMAL}{Style.DIM} '
)
print(
color_text("", Fore.BLUE),
color_text(
f' captured script output "{fmt_output}"',
Fore.BLUE + Style.DIM
)
)
return output
def run_many(
self,
script_list: list[str | Path],
):
outputs = []
for script in script_list:
output = self.run_script(script)
outputs.append(output)
return outputs