#!/usr/bin/env python3
# 重启数字人v2服务（重新加载v11.7）
import subprocess, os, time, signal

# 1. 找到占用8766端口的进程并杀掉
import socket
def find_proc_by_port(port):
    try:
        out = subprocess.check_output(['netstat', '-ano'], text=True, timeout=5)
        for line in out.split('\n'):
            if f':{port}' in line and 'LISTEN' in line:
                parts = line.split()
                for p in parts:
                    if p.isdigit():
                        return int(p)
    except:
        pass
    return None

pid = find_proc_by_port(8766)
if pid:
    print(f"杀掉占用8766端口的进程 PID={pid}")
    os.kill(pid, signal.SIGTERM)
    time.sleep(2)

# 2. 启动新的服务（后台）
work_dir = r'D:\AI-Ad-Agent\portal'
cmd = [r'C:\AI\gptsovits_env\Scripts\python.exe', 
       r'D:\AI-Ad-Agent\portal\dh_v2_startup.py']

print("启动数字人v2服务（v11.7，含50Hz陷波器去电流声）...")
with open(os.path.join(work_dir, 'dh_v2.log'), 'a', encoding='utf-8') as f:
    proc = subprocess.Popen(
        cmd, cwd=work_dir,
        stdout=subprocess.PIPE, stderr=subprocess.STDOUT,
        text=True, bufsize=1
    )
    # 等待5秒检查是否启动
    time.sleep(5)
    if proc.poll() is None:
        print(f"✅ 服务已启动 PID={proc.pid}")
    else:
        out, _ = proc.communicate()
        print(f"❌ 启动失败：{out[:500]}")
