diff --git a/src/benchmarks/mysql.py b/src/benchmarks/mysql.py index 0d24ff66cb4b21b71c60e72da5e199e6092c6da6..f80286f68ff2fa0076c34a801083a59c2ff570de 100644 --- a/src/benchmarks/mysql.py +++ b/src/benchmarks/mysql.py @@ -75,15 +75,14 @@ import multiprocessing import os import re import shutil -import subprocess -from subprocess import PIPE +from subprocess import CalledProcessError import sys import numpy as np from src.benchmark import Benchmark import src.facter -from src.util import print_status, print_debug, print_info2 +from src.util import print_status, print_debug, print_info2, run_cmd MYSQL_USER = "fischerling" RUN_TIME = 10 @@ -147,39 +146,34 @@ class BenchmarkMYSQL(Benchmark): ] print_info2("Oracle MySQL detected") - p = subprocess.run(init_db_cmd, stdout=PIPE, stderr=PIPE) - - if not p.returncode == 0: - print_debug(init_db_cmd) - print_debug("Stdout:", p.stdout, file=sys.stdout) - print_debug("Stderr:", p.stderr, file=sys.stderr) - raise Exception("Creating test DB failed with:", p.returncode) + try: + run_cmd(init_db_cmd, capture=True) + except CalledProcessError as e: + print_debug("Stdout:", e.stdout, file=sys.stderr) + print_debug("Stderr:", e.stderr, file=sys.stderr) + raise e self.start_servers() # Create sbtest TABLE - p = subprocess.run( - f"mysql -u {MYSQL_USER} -S {self.build_dir}/socket".split(), - input=b"CREATE DATABASE sbtest;\n", - stdout=PIPE, - stderr=PIPE, + create_db_cmd = f"mysql -u {MYSQL_USER} -S {self.build_dir}/socket".split(), + try: + run_cmd(create_db_cmd, + input="CREATE DATABASE sbtest;\n", + capture=True, cwd=self.build_dir) - - if p.returncode != 0: - print_debug("Stderr:", p.stderr, file=sys.stderr) - raise Exception("Creating test tables failed with:", - p.returncode) + except CalledProcessError as e: + print_debug("Stderr:", e.stderr, file=sys.stderr) + raise e print_status("Prepare test tables ...") - prepare_cmd = PREPARE_CMD.format(build_dir=self.build_dir) - p = subprocess.run(prepare_cmd.split(), stdout=PIPE, stderr=PIPE) - if p.returncode != 0: - print_debug(f"Cmd: {prepare_cmd} failed with {p.returncode}", - file=sys.stderr) + prepare_cmd = PREPARE_CMD.format(build_dir=self.build_dir).split() + try: + run_cmd(prepare_cmd, captur=True) + except CalledProcessError as e: print_debug("Stdout:", p.stdout, file=sys.stderr) print_debug("Stderr:", p.stderr, file=sys.stderr) - raise Exception("Preparing test tables failed with:", - p.returncode) + raise e self.shutdown_servers() diff --git a/src/benchmarks/raxmlng.py b/src/benchmarks/raxmlng.py index dd405f55340e366c7165603f835ef6225ae08c42..786b1437f8404eef8daef1130c3668ca60caf10f 100644 --- a/src/benchmarks/raxmlng.py +++ b/src/benchmarks/raxmlng.py @@ -18,13 +18,12 @@ import os import re -import subprocess import sys from urllib.request import urlretrieve from src.artifact import GitArtifact from src.benchmark import Benchmark -from src.util import print_info +from src.util import print_info, run_cmd RUNTIME_RE = re.compile("Elapsed time: (?P<runtime>(\\d*.\\d*)) seconds") @@ -59,17 +58,8 @@ class BenchmarkRaxmlng(Benchmark): os.makedirs(raxmlng_builddir, exist_ok=True) # building raxml-ng - proc = subprocess.run( - ["cmake", ".."], - cwd=raxmlng_builddir, - # stdout=subprocess.PIPE, stderr=subprocess.PIPE, - universal_newlines=True) - - proc = subprocess.run( - ["make"], - cwd=raxmlng_builddir, - # stdout=subprocess.PIPE, stderr=subprocess.PIPE, - universal_newlines=True) + run_cmd( ["cmake", ".."], cwd=raxmlng_builddir, output_verbosity=2) + run_cmd( ["make"], cwd=raxmlng_builddir, output_verbosity=2) # create symlinks for exe in ["raxml-ng"]: diff --git a/src/benchmarks/redis.py b/src/benchmarks/redis.py index b487baffbd22187c9140c6e0ae59721a40ef50a9..23c2de69df34878d9c34ac835d6c0b311a7fb73a 100644 --- a/src/benchmarks/redis.py +++ b/src/benchmarks/redis.py @@ -23,13 +23,12 @@ archive. The used parameters are inspired by the ones used in mimalloc-bench." import os import re -import subprocess import sys from urllib.request import urlretrieve from src.artifact import ArchiveArtifact from src.benchmark import Benchmark -from src.util import print_info +from src.util import print_info, run_cmd REQUESTS_RE = re.compile("(?P<requests>(\\d*.\\d*)) requests per second") @@ -63,10 +62,7 @@ class BenchmarkRedis(Benchmark): redis.provide(self.build_dir) # building redis - proc = subprocess.run( - ["make", "-C", redis_dir, "MALLOC=libc", "USE_JEMALLOC=no"], - # stdout=subprocess.PIPE, stderr=subprocess.PIPE, - universal_newlines=True) + run_cmd(["make", "-C", redis_dir, "MALLOC=libc", "USE_JEMALLOC=no"]) # create symlinks for exe in ["redis-cli", "redis-server", "redis-benchmark"]: diff --git a/src/util.py b/src/util.py index 7992084bf8aa44322ab58461e42e080357dcf86e..3f2ab06633ab688c81cc129f3b50a416afef1e4e 100644 --- a/src/util.py +++ b/src/util.py @@ -24,6 +24,32 @@ import sys import src.globalvars +def run_cmd(cmd, + output_verbosity=3, + capture=False, + check=True, + cwd=None, + input=None): + """subprocess.run wrapper which cares about the set verbosity""" + if capture: + stdout = subprocess.PIPE + stderr = stdout + elif src.globalvars.verbosity < output_verbosity: + stdout = subprocess.DEVNULL + stderr = stdout + else: + stdout = None + stderr = stdout + + return subprocess.run(cmd, + check=check, + universal_newlines=True, + cwd=None, + stdout=stdout, + stderr=stderr, + input=input) + + def is_exe(fpath): """Check if the given path is an exexutable file""" return os.path.isfile(fpath) and os.access(fpath, os.X_OK)