自动更新脚本编写

This commit is contained in:
liuwei
2025-03-31 14:20:55 +08:00
parent 9dcc7ead82
commit 2bb92d5f6a

View File

@@ -46,7 +46,7 @@ def kill_current_python_process():
for proc in psutil.process_iter(['pid', 'name', 'cmdline']): for proc in psutil.process_iter(['pid', 'name', 'cmdline']):
try: try:
proc_pid = proc.info['pid'] proc_pid = proc.info['pid']
proc_name = proc.info['name'].lower() proc_name = proc.info['name'].lower() if proc.info['name'] else ""
# 跳过当前进程 # 跳过当前进程
if proc_pid == current_pid: if proc_pid == current_pid:
@@ -59,12 +59,13 @@ def kill_current_python_process():
full_proc = psutil.Process(proc_pid) full_proc = psutil.Process(proc_pid)
cmdline = ' '.join(full_proc.cmdline()).lower() if full_proc.cmdline() else '' cmdline = ' '.join(full_proc.cmdline()).lower() if full_proc.cmdline() else ''
# 检查是否是相关进程 # 检查是否是相关进程 - 更广泛的匹配条件
if ('python' in cmdline or if ('python' in cmdline or
'wechatrobot' in cmdline or 'wechatrobot' in cmdline or
'robot.py' in cmdline or 'robot' in cmdline or
'main.py' in cmdline or 'main' in cmdline or
'win_click.py' in cmdline): 'win_click' in cmdline or
os.path.dirname(os.path.abspath(__file__)).lower() in cmdline.lower()):
processes_to_kill.append(full_proc) processes_to_kill.append(full_proc)
print(f"找到相关Python进程: {full_proc.name()} (PID: {proc_pid}), 命令行: {cmdline[:50]}...") print(f"找到相关Python进程: {full_proc.name()} (PID: {proc_pid}), 命令行: {cmdline[:50]}...")
except Exception as e: except Exception as e:
@@ -77,13 +78,15 @@ def kill_current_python_process():
cmdline = ' '.join(full_proc.cmdline()).lower() if full_proc.cmdline() else '' cmdline = ' '.join(full_proc.cmdline()).lower() if full_proc.cmdline() else ''
# 检查是否是与bot_start或restart_system相关的cmd进程 # 检查是否是与bot_start或restart_system相关的cmd进程
if ('bot_start' in cmdline or 'restart_system' in cmdline): if ('bot_start' in cmdline or 'restart_system' in cmdline or
os.path.dirname(os.path.abspath(__file__)).lower() in cmdline.lower()):
processes_to_kill.append(full_proc) processes_to_kill.append(full_proc)
print(f"找到相关CMD进程: {full_proc.name()} (PID: {proc_pid}), 命令行: {cmdline[:50]}...") print(f"找到相关CMD进程: {full_proc.name()} (PID: {proc_pid}), 命令行: {cmdline[:50]}...")
except Exception as e: except Exception as e:
print(f"检查CMD进程 {proc_pid} 时出错: {e}") print(f"检查CMD进程 {proc_pid} 时出错: {e}")
except (psutil.NoSuchProcess, psutil.AccessDenied, psutil.ZombieProcess): except (psutil.NoSuchProcess, psutil.AccessDenied, psutil.ZombieProcess) as e:
print(f"检查进程时出错: {e}")
continue continue
# 确保不杀死当前进程和系统进程 # 确保不杀死当前进程和系统进程
@@ -149,12 +152,17 @@ def kill_current_python_process():
print(f"仍有 {len(still_running)} 个进程未终止,尝试使用系统命令终止...") print(f"仍有 {len(still_running)} 个进程未终止,尝试使用系统命令终止...")
for proc in still_running: for proc in still_running:
try: try:
# 使用taskkill强制终止进程 # 使用taskkill强制终止进程和子进程
os.system(f"taskkill /F /PID {proc.pid}") os.system(f"taskkill /F /PID {proc.pid} /T")
print(f"使用taskkill终止进程: PID {proc.pid}") print(f"使用taskkill终止进程及其子进程: PID {proc.pid}")
except Exception as e: except Exception as e:
print(f"使用taskkill终止进程 {proc.pid} 时出错: {e}") print(f"使用taskkill终止进程 {proc.pid} 时出错: {e}")
# 全局终止所有Python进程最后的保险措施
print("使用系统命令终止所有残留的Python进程...")
os.system("taskkill /F /IM python.exe /T 2>nul")
os.system("taskkill /F /IM pythonw.exe /T 2>nul")
print("进程终止操作完成") print("进程终止操作完成")
# 返回终止进程的函数 # 返回终止进程的函数
@@ -343,10 +351,14 @@ def update_system(wait_time=15):
with open(temp_bat, "w") as f: with open(temp_bat, "w") as f:
f.write(f"""@echo off f.write(f"""@echo off
echo 等待旧进程结束... echo 等待旧进程结束...
timeout /t 3 /nobreak > nul timeout /t 5 /nobreak > nul
echo 强制终止残留Python进程... echo 强制终止残留Python进程...
taskkill /F /IM python.exe /T taskkill /F /IM python.exe /T 2>nul
taskkill /F /IM pythonw.exe /T taskkill /F /IM pythonw.exe /T 2>nul
timeout /t 2 /nobreak > nul
echo 再次确认无残留进程...
taskkill /F /IM python.exe /T 2>nul
taskkill /F /IM pythonw.exe /T 2>nul
echo 重新启动系统... echo 重新启动系统...
start "" "{bat_path}" start "" "{bat_path}"
echo 等待系统启动和微信加载 ({wait_time}秒)... echo 等待系统启动和微信加载 ({wait_time}秒)...
@@ -371,8 +383,12 @@ echo 清理临时脚本...
startupinfo=startupinfo) startupinfo=startupinfo)
# 等待脚本启动 # 等待脚本启动
print("已启动临时脚本,等待2秒...") print("已启动临时脚本,等待3秒...")
time.sleep(2) time.sleep(3)
# 直接调用全局终止方法确保干净退出
print("终止所有Python相关进程...")
os.system("taskkill /F /IM python.exe /T 2>nul")
# 结束当前Python相关进程并退出 # 结束当前Python相关进程并退出
print("结束当前进程...") print("结束当前进程...")