Run a command and capture output
Execute a argv list and return status, stdout, and stderr.
18th August 2026
import os
from subprocess import PIPE, Popen
from typing import Any, List, NamedTuple
class ExecutionResult(NamedTuple):
status: int
stdout: str
stderr: str
def execute_shell_command(cmd: List[str]) -> ExecutionResult:
with Popen(cmd, stdout=PIPE, stderr=PIPE, cwd=os.getcwd()) as process:
stdout_raw, stderr_raw = process.communicate()
status: int | Any = process.returncode
stdout = stdout_raw.decode('utf-8').rstrip()
stderr = stderr_raw.decode('utf-8').rstrip()
return ExecutionResult(status, stdout, stderr)