#!/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()