# coding=UTF-8
# Copyright (c) 2025 Huawei Technologies Co., Ltd

import os
import subprocess

import utils

log = utils.stream_logger()


def sync_command(cmd: list[str], cwd: str = None, env: dict[str, str] = None):
    """
    在指定路径同步执行命令,不返回任何信息
    注意:不能打印cmd,因为cmd可能包含敏感信息或用户输入的参数,打印可能导致信息泄露。
    :param cmd: 可执行命令路径
    :param cwd: 命令的参数
    :param env: 执行的环境变量
    """
    log.info(f"Executing command[{cmd[0]}] in {cwd if cwd else os.getcwd()}")
    subprocess.run(cmd, cwd=cwd, env=env, text=True, check=True)


def exec_command(cmd: list[str]):
    """
    启动指定的shell命令,并用该命令替换当前进程,类似于shell中的exec命令。
    :param cmd: 可执行命令路径
    """
    # 使用os.execvp来替换当前进程
    os.execvp(cmd[0], cmd[1:])


def pipe_command(cmd: list[str], cwd: str = None):
    """
    在指定路径同步执行命令,捕获并返回码、标准输出和标准错误。
    注意:不能打印cmd,因为cmd可能包含敏感信息或用户输入的参数,打印可能导致信息泄露。
    :param cmd: 可执行命令路径
    :param cwd: 命令的参数
    """
    log.info(f"Executing command[{cmd[0]}] in {cwd if cwd else os.getcwd()}")
    proc = subprocess.run(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True)
    return proc.returncode, proc.stdout, proc.stderr