From 497fb9e21f45ec08e1486abaee6dfa7b20b8a691 Mon Sep 17 00:00:00 2001 From: Scott Gasch Date: Wed, 24 Mar 2021 18:08:54 -0700 Subject: Initial revision --- exec_utils.py | 50 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 exec_utils.py (limited to 'exec_utils.py') diff --git a/exec_utils.py b/exec_utils.py new file mode 100644 index 0000000..0ed3601 --- /dev/null +++ b/exec_utils.py @@ -0,0 +1,50 @@ +#!/usr/bin/env python3 + +import shlex +import subprocess +from typing import List + + +def cmd_with_timeout(command: str, timeout_seconds: float) -> int: + return subprocess.check_call( + ["/bin/bash", "-c", command], timeout=timeout_seconds + ) + + +def cmd(command: str) -> str: + """Run a command with everything encased in a string and return + the output text as a string. Raises subprocess.CalledProcessError. + """ + ret = subprocess.run( + command, shell=True, capture_output=True, check=True + ).stdout + return ret.decode("utf-8") + + +def run_silently(command: str) -> None: + """Run a command silently but raise subprocess.CalledProcessError if + it fails.""" + subprocess.run( + command, shell=True, stderr=subprocess.DEVNULL, stdout=subprocess.DEVNULL, + capture_output=False, check=True + ) + + +def cmd_in_background(command: str, *, silent: bool = False) -> subprocess.Popen: + args = shlex.split(command) + if silent: + return subprocess.Popen(args, + stdin=subprocess.DEVNULL, + stdout=subprocess.DEVNULL, + stderr=subprocess.DEVNULL) + else: + return subprocess.Popen(args, + stdin=subprocess.DEVNULL) + + +def cmd_list(command: List[str]) -> str: + """Run a command with args encapsulated in a list and return the + output text as a string. Raises subprocess.CalledProcessError. + """ + ret = subprocess.run(command, capture_output=True, check=True).stdout + return ret.decode("utf-8") -- cgit v1.3