mirror of
https://github.com/zebrajr/ansible.git
synced 2025-12-06 00:19:48 +01:00
34 lines
817 B
Python
Executable File
34 lines
817 B
Python
Executable File
#!/usr/bin/env python
|
|
from __future__ import annotations
|
|
|
|
import argparse
|
|
import signal
|
|
import subprocess
|
|
import sys
|
|
|
|
|
|
def signal_type(v: str) -> signal.Signals:
|
|
if v.isdecimal():
|
|
return signal.Signals(int(v))
|
|
if not v.startswith('SIG'):
|
|
v = f'SIG{v}'
|
|
return getattr(signal.Signals, v)
|
|
|
|
|
|
parser = argparse.ArgumentParser()
|
|
parser.add_argument('duration', type=int)
|
|
parser.add_argument('--signal', '-s', default=signal.SIGTERM, type=signal_type)
|
|
parser.add_argument('command', nargs='+')
|
|
args = parser.parse_args()
|
|
|
|
p: subprocess.Popen | None = None
|
|
try:
|
|
p = subprocess.Popen(args.command)
|
|
p.wait(timeout=args.duration)
|
|
sys.exit(p.returncode)
|
|
except subprocess.TimeoutExpired:
|
|
if p and p.poll() is None:
|
|
p.send_signal(args.signal)
|
|
p.wait()
|
|
sys.exit(124)
|