From 2bc566aa26358736808c2dfd69e721433ee219b4 Mon Sep 17 00:00:00 2001 From: chengchongzhen <15939054361@163.com> Date: Thu, 9 Jan 2025 18:53:34 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=A2=9E=E5=8A=A0=E9=80=80=E5=87=BAcur?= =?UTF-8?q?sor?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- cursor_pro_keep_alive.py | 6 +++- exit_cursor.py | 68 ++++++++++++++++++++++++++++++++++++++++ logger.py | 9 ++++++ 3 files changed, 82 insertions(+), 1 deletion(-) create mode 100644 exit_cursor.py diff --git a/cursor_pro_keep_alive.py b/cursor_pro_keep_alive.py index 9a21ba2..579c58c 100644 --- a/cursor_pro_keep_alive.py +++ b/cursor_pro_keep_alive.py @@ -1,5 +1,7 @@ import os +from exit_cursor import ExitCursor + os.environ["PYTHONVERBOSE"] = "0" os.environ["PYINSTALLER_VERBOSE"] = "0" @@ -11,7 +13,7 @@ from logger import logging from browser_utils import BrowserManager from get_email_code import EmailVerificationHandler from logo import print_logo - +import psutil def handle_turnstile(tab): @@ -219,10 +221,12 @@ class EmailGenerator: } + if __name__ == "__main__": print_logo() browser_manager = None try: + ExitCursor() # 初始化浏览器 browser_manager = BrowserManager() browser = browser_manager.init_browser() diff --git a/exit_cursor.py b/exit_cursor.py new file mode 100644 index 0000000..cd5f576 --- /dev/null +++ b/exit_cursor.py @@ -0,0 +1,68 @@ +import psutil +from logger import logging +import time + +def ExitCursor(timeout=5): + """ + 温和地关闭 Cursor 进程 + + Args: + timeout (int): 等待进程自然终止的超时时间(秒) + Returns: + bool: 是否成功关闭所有进程 + """ + try: + logging.info("开始退出Cursor...") + cursor_processes = [] + # 收集所有 Cursor 进程 + for proc in psutil.process_iter(['pid', 'name']): + try: + if proc.info['name'].lower() in ['cursor.exe', 'cursor']: + cursor_processes.append(proc) + except (psutil.NoSuchProcess, psutil.AccessDenied): + continue + + if not cursor_processes: + logging.info("未发现运行中的 Cursor 进程") + return True + + # 温和地请求进程终止 + for proc in cursor_processes: + try: + if proc.is_running(): + proc.terminate() # 发送终止信号 + except (psutil.NoSuchProcess, psutil.AccessDenied): + continue + + # 等待进程自然终止 + start_time = time.time() + while time.time() - start_time < timeout: + still_running = [] + for proc in cursor_processes: + try: + if proc.is_running(): + still_running.append(proc) + except (psutil.NoSuchProcess, psutil.AccessDenied): + continue + + if not still_running: + logging.info("所有 Cursor 进程已正常关闭") + return True + + # 等待一小段时间再检查 + time.sleep(0.5) + + # 如果超时后仍有进程在运行 + if still_running: + process_list = ", ".join([str(p.pid) for p in still_running]) + logging.warning(f"以下进程未能在规定时间内关闭: {process_list}") + return False + + return True + + except Exception as e: + logging.error(f"关闭 Cursor 进程时发生错误: {str(e)}") + return False + +if __name__ == "__main__": + ExitCursor() diff --git a/logger.py b/logger.py index 7fc0d61..0aa7e5e 100644 --- a/logger.py +++ b/logger.py @@ -11,8 +11,17 @@ logging.basicConfig( filename=os.path.join(log_dir, f"{datetime.now().strftime('%Y-%m-%d')}.log"), level=logging.DEBUG, format="%(asctime)s - %(levelname)s - %(message)s", + encoding='utf-8', ) +# 创建控制台处理器 +console_handler = logging.StreamHandler() +console_handler.setLevel(logging.INFO) +console_handler.setFormatter(logging.Formatter("%(message)s")) + +# 将控制台处理器添加到日志记录器 +logging.getLogger().addHandler(console_handler) + def main_task(): """ Main task execution function. Simulates a workflow and handles errors.