diff --git a/bench.py b/bench.py
index 9f4a6c127eb574d2590197cb935382baf02e4e8f..ed5b2da274019a00f42d46a6943ecae441d5c67c 100755
--- a/bench.py
+++ b/bench.py
@@ -23,14 +23,13 @@ import atexit
 import datetime
 import importlib
 import os
-import subprocess
 import sys
 import traceback
 
 from src.allocator import collect_allocators
 import src.facter
 import src.globalvars
-from src.util import find_cmd
+from src.util import find_cmd, run_cmd
 from src.util import print_status, print_warn, print_error
 from src.util import print_info, print_info2, print_debug
 from src.util import print_license_and_exit
@@ -59,14 +58,14 @@ def check_dependencies():
     # used python 3.6 features: f-strings
     if sys.version_info[0] < 3 or sys.version_info[1] < 6:
         print_error("At least python version 3.6 is required.")
-        exit(1)
+        sys.exit(1)
 
     # matplotlib is needed by Benchmark.plot_*
     try:
         importlib.import_module("matplotlib")
     except ModuleNotFoundError:
         print_error("matplotlib not found.")
-        exit(1)
+        sys.exit(1)
     # TODO mariadb
 
 
@@ -117,7 +116,7 @@ def main():
 
     if args.version:
         print(src.facter.allocbench_version())
-        exit(0)
+        sys.exit(0)
 
     atexit.register(epilog)
 
@@ -135,9 +134,9 @@ def main():
     # Prepare allocbench
     print_status("Building allocbench ...")
     make_cmd = ["make"]
-    if src.globalvars.verbosity < 1:
+    if src.globalvars.verbosity < 2:
         make_cmd.append("-s")
-    subprocess.run(make_cmd)
+    run_cmd(make_cmd, output_verbosity=1)
 
     # allocators to benchmark
     src.globalvars.allocators = collect_allocators(args.allocators)
@@ -147,7 +146,7 @@ def main():
 
     if src.globalvars.allocators == {}:
         print_error("Abort because there are no allocators to benchmark")
-        exit(1)
+        sys.exit(1)
 
     # collect facts about benchmark environment
     src.facter.collect_facts()
diff --git a/merge.py b/merge.py
index 77fe73c63f98f72325d4d91cb0e6418dde30a040..3c881395339b67739e73d49d24e9f899d4929c3e 100755
--- a/merge.py
+++ b/merge.py
@@ -43,7 +43,7 @@ def main():
 
     if "--version" in sys.argv:
         print(src.facter.allocbench_version())
-        exit(0)
+        sys.exit(0)
 
     parser = argparse.ArgumentParser(description="Merge to allocbench results")
     parser.add_argument("src", help="results which should be merged into dest", type=str)
@@ -58,7 +58,7 @@ def main():
     for src_save in os.listdir(args.src):
         if not os.path.splitext(src_save)[1] in [".json", ".save"]:
             continue
-        if src_save == "facts.save" or src_save == "facts.json":
+        if src_save in ["facts.save", "facts.json"]:
             continue
         if args.benchmarks and not src_save[:-5] in args.benchmarks:
             continue
diff --git a/src/chattyparser.py b/src/chattyparser.py
index 0bd682178ea9f271d752a19a10f4ff5f4b4f8f21..3c64ed71ff79c66525e5b8c4ec345ff6c7431f1e 100755
--- a/src/chattyparser.py
+++ b/src/chattyparser.py
@@ -227,12 +227,12 @@ if __name__ == "__main__":
     if "--license" in sys.argv:
         print("Copyright (C) 2018-2019 Florian Fischer")
         print("License GPLv3: GNU GPL version 3 <http://gnu.org/licenses/gpl.html>")
-        exit(0)
+        sys.exit(0)
 
     if len(sys.argv) != 2 or sys.argv[1] in ["-h", "--help"]:
         print("chattyparser: parse chattymalloc output and",
               "create size histogram and memory profile", file=sys.stderr)
         print(f"Usage: {sys.argv[0]} chattymalloc-file", file=sys.stderr)
-        exit(1)
+        sys.exit(1)
 
     plot(sys.argv[1])
diff --git a/src/util.py b/src/util.py
index 04a4a0ca829948964501d2bbc06ceeb7637da05b..b095f1a5ad2bf843f763a937a46a4a48c47c55af 100644
--- a/src/util.py
+++ b/src/util.py
@@ -93,8 +93,7 @@ def prefix_cmd_with_abspath(cmd):
     # add arguments of cmd to the abspath
     if binary_end:
         return binary_abspath + " " + cmd[binary_end:]
-    else:
-        return binary_abspath
+    return binary_abspath
 
 
 def allocbench_msg(color, *objects, sep=' ', end='\n', file=sys.stdout):
@@ -168,7 +167,7 @@ def print_license_and_exit():
     print("Copyright (C) 2018-2019 Florian Fischer")
     print(
         "License GPLv3: GNU GPL version 3 <http://gnu.org/licenses/gpl.html>")
-    exit(0)
+    sys.exit(0)
 
 
 def sha1sum(filename):
diff --git a/summarize.py b/summarize.py
index d974fb200edd2af59da6f3fd8c48c290975c26e9..351bedf3e60a92fd7eae0663148de8d436a098dc 100755
--- a/summarize.py
+++ b/summarize.py
@@ -96,7 +96,7 @@ def main():
 
     if "--version" in sys.argv:
         print(src.facter.allocbench_version())
-        exit(0)
+        sys.exit(0)
 
     parser = argparse.ArgumentParser(description="Summarize allocbench results in allocator sets")
     parser.add_argument("results", help="path to results", type=str)
@@ -110,7 +110,7 @@ def main():
 
     if not os.path.isdir(args.results):
         print_error(f"{args.results} is no directory")
-        exit(1)
+        sys.exit(1)
 
     if args.file_ext:
         src.globalvars.summary_file_ext = args.file_ext