55 lines
1.4 KiB
Python
55 lines
1.4 KiB
Python
#!/usr/bin/env python3
|
|
|
|
import argparse
|
|
import json
|
|
import os
|
|
import platform
|
|
import re
|
|
import shutil
|
|
import subprocess
|
|
import sys
|
|
import time
|
|
import urllib.request
|
|
from dataclasses import dataclass, field
|
|
from pathlib import Path
|
|
from typing import Any, Dict, List, Optional, Union
|
|
|
|
import yaml
|
|
|
|
|
|
def main():
|
|
try:
|
|
# Use Popen for real-time output
|
|
process = subprocess.Popen(
|
|
command,
|
|
shell=shell,
|
|
stdout=subprocess.PIPE,
|
|
stderr=subprocess.STDOUT,
|
|
universal_newlines=True,
|
|
bufsize=1,
|
|
)
|
|
|
|
# Stream output in real-time
|
|
output_lines = []
|
|
for line in process.stdout:
|
|
line = line.rstrip()
|
|
if line: # Only show non-empty lines
|
|
self.console.step_output(line)
|
|
output_lines.append(line)
|
|
|
|
process.wait()
|
|
|
|
if check and process.returncode != 0:
|
|
raise subprocess.CalledProcessError(process.returncode, command, output="\n".join(output_lines))
|
|
|
|
# Create a mock CompletedProcess for compatibility
|
|
result = subprocess.CompletedProcess(command, process.returncode, stdout="\n".join(output_lines), stderr="")
|
|
return result
|
|
|
|
except subprocess.CalledProcessError as e:
|
|
raise RuntimeError(f"Command failed: {command}\nExit code: {e.returncode}")
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|