mirror of
https://github.com/dragonpilot/dragonpilot.git
synced 2026-06-22 14:32:07 +08:00
c5d5c5d1f3
date: 2025-10-24T00:30:59 master commit: 405631baf9685e171a0dd19547cb763f1b163d18
29 lines
732 B
Python
29 lines
732 B
Python
import subprocess
|
|
from contextlib import contextmanager
|
|
from subprocess import Popen, PIPE, TimeoutExpired
|
|
|
|
|
|
def run_cmd(cmd: list[str], cwd=None, env=None) -> str:
|
|
return subprocess.check_output(cmd, encoding='utf8', cwd=cwd, env=env).strip()
|
|
|
|
|
|
def run_cmd_default(cmd: list[str], default: str = "", cwd=None, env=None) -> str:
|
|
try:
|
|
return run_cmd(cmd, cwd=cwd, env=env)
|
|
except subprocess.CalledProcessError:
|
|
return default
|
|
|
|
|
|
@contextmanager
|
|
def managed_proc(cmd: list[str], env: dict[str, str]):
|
|
proc = Popen(cmd, env=env, stdout=PIPE, stderr=PIPE)
|
|
try:
|
|
yield proc
|
|
finally:
|
|
if proc.poll() is None:
|
|
proc.terminate()
|
|
try:
|
|
proc.wait(timeout=5)
|
|
except TimeoutExpired:
|
|
proc.kill()
|