如何在Python中监听pyperclip剪贴板变化并收集复制的URL
pyperclip 剪贴板URL监听实现方案
实现逻辑
- 单独启动守护线程运行监听逻辑,不阻塞主线程正常执行
- 轮询对比剪贴板前后内容,仅在内容变化时触发处理逻辑,减少不必要的性能消耗
- 新增URL格式校验,过滤非URL内容
- 新增线程退出控制标志,支持主动终止监听任务
完整示例代码
import pyperclip import threading import time import re # 存储所有捕获到的URL copied_urls = [] # 线程退出控制标志 exit_flag = False # URL匹配正则,默认匹配http/https开头的链接,可按需调整规则 URL_REGEX = re.compile(r"^https?://\S+", re.IGNORECASE) def clipboard_monitor(): # 初始化上一次剪贴板内容 last_clip = pyperclip.paste() while not exit_flag: current_clip = pyperclip.paste() # 剪贴板内容发生变更 if current_clip != last_clip: last_clip = current_clip # 校验是否为合法URL match_result = URL_REGEX.match(current_clip.strip()) if match_result: valid_url = match_result.group() copied_urls.append(valid_url) print(f"已捕获新URL: {valid_url}") # 轮询间隔,可按需调整,数值越小响应越快CPU占用越高 time.sleep(0.5) if __name__ == "__main__": # 启动监听线程,设置为守护线程,主程序退出时自动销毁 monitor_thread = threading.Thread(target=clipboard_monitor, daemon=True) monitor_thread.start() print("剪贴板URL监听已启动,按 Ctrl+C 停止监听") try: # 主线程可在此处运行其他业务逻辑 while True: time.sleep(1) except KeyboardInterrupt: print("\n监听已停止,捕获到的URL列表如下:") for index, url in enumerate(copied_urls, 1): print(f"{index}. {url}") finally: # 终止监听线程 exit_flag = True monitor_thread.join()
注意事项
- 如果需要匹配FTP、本地文件路径等其他格式的链接,直接修改
URL_REGEX正则规则即可 - 如果需要识别剪贴板内多个URL的场景,将
match方法替换为findall即可批量提取所有URL - 轮询间隔建议设置在0.2秒到1秒之间,平衡响应速度和CPU占用
内容的提问来源于stack exchange,提问作者WhiteAB
相关产品推荐
相关产品推荐

