Python 局域网剪切板同步工具如何实现?
场景:使用远程桌面开发,远程电脑和本机能连接到同一个数据库,但不能通过远程桌面复制和粘贴。 通过数据库打通剪切板。实现来回复制。 GitHub: https://github.com/gaoice/python-tools
exe 版本 度盘: https://pan.baidu.com/s/1n5dIWXEC0Y3I5h6MzZ0tfw 提取码: uepi
Python 局域网剪切板同步工具如何实现?
1 回复
要搞个局域网剪切板同步工具,核心就是监听本地剪切板变化,然后通过Socket广播给局域网其他机器。下面这个实现用到了pyperclip和socket:
import pyperclip
import socket
import threading
import time
from datetime import datetime
class ClipboardSync:
def __init__(self, port=9999):
self.port = port
self.last_content = ""
self.running = True
# 创建UDP socket
self.sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
self.sock.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)
self.sock.settimeout(0.1)
def start(self):
"""启动剪切板同步"""
# 启动监听线程
listen_thread = threading.Thread(target=self._listen_clipboard)
listen_thread.daemon = True
listen_thread.start()
# 启动接收线程
receive_thread = threading.Thread(target=self._receive_broadcast)
receive_thread.daemon = True
receive_thread.start()
print(f"剪切板同步已启动,监听端口 {self.port}")
print("按 Ctrl+C 停止")
try:
while self.running:
time.sleep(1)
except KeyboardInterrupt:
self.stop()
def stop(self):
"""停止同步"""
self.running = False
self.sock.close()
print("剪切板同步已停止")
def _listen_clipboard(self):
"""监听本地剪切板变化"""
while self.running:
try:
current_content = pyperclip.paste()
# 如果内容发生变化且不是空字符串
if (current_content != self.last_content and
current_content.strip() != ""):
self.last_content = current_content
self._broadcast_content(current_content)
timestamp = datetime.now().strftime("%H:%M:%S")
print(f"[{timestamp}] 发送: {current_content[:50]}...")
time.sleep(0.5) # 降低CPU使用率
except Exception as e:
print(f"监听剪切板出错: {e}")
time.sleep(1)
def _broadcast_content(self, content):
"""广播剪切板内容到局域网"""
try:
message = f"CLIPBOARD:{content}"
self.sock.sendto(message.encode('utf-8'),
('<broadcast>', self.port))
except Exception as e:
print(f"广播失败: {e}")
def _receive_broadcast(self):
"""接收其他机器的广播"""
receiver = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
receiver.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
receiver.bind(('', self.port))
while self.running:
try:
data, addr = receiver.recvfrom(65535)
message = data.decode('utf-8')
if message.startswith("CLIPBOARD:"):
content = message[10:] # 去掉前缀
# 避免回环(不设置自己发送的内容)
if content != self.last_content:
pyperclip.copy(content)
self.last_content = content
timestamp = datetime.now().strftime("%H:%M:%S")
ip = addr[0]
print(f"[{timestamp}] 来自 {ip}: {content[:50]}...")
except socket.timeout:
continue
except Exception as e:
print(f"接收数据出错: {e}")
if __name__ == "__main__":
# 安装依赖: pip install pyperclip
sync = ClipboardSync()
sync.start()
工作原理:
pyperclip负责读取和设置系统剪切板- UDP广播把剪切板内容发给局域网所有机器(端口9999)
- 每个实例既发送也接收,实现双向同步
- 通过时间戳和内容去重避免循环同步
运行方式:
在局域网每台电脑上运行这个脚本,需要先 pip install pyperclip。所有机器就能自动同步剪切板内容了。
简单说就是监听变化+网络广播。

