使用单个Python脚本在Linux、Mac和Windows上复制剪贴板数据
我想用Python写一个脚本,这个脚本可以收集用户放到剪贴板上的数据,并且最好能把这些数据保存成一个列表、文本文件,或者字符串/数组/变量,以便后续使用。
这个脚本应该能在所有版本的Linux(我猜是Ubuntu)、Mac OS和Windows上运行。我不太确定32位和64位系统在访问剪贴板数据时是否有不同的方法。如果有的话,我觉得只让它在32位版本上运行是安全的,这样使用64位版本的人也可以退回到32位的操作系统。
除了要在上述操作系统上运行之外,比较棘手的部分是我希望这个脚本能一直运行,直到用户主动停止它。在它运行的时候,用户复制到剪贴板上的所有数据都应该被复制到一个列表、文本文件或者字符串/数组/变量中。
当然,用户在剪贴板上输入数据是有时间限制的,所以我想每秒或者每500毫秒扫描一次剪贴板,检查内容是否有变化,如果有变化就复制,没有变化就不复制。
有没有一种统一的方法或模块可以在不同的操作系统上实现这个功能,还是说为不同的操作系统写单独的脚本会更好呢?
问题是,这个功能是我一个更大项目的一部分,我希望它能在Linux、Mac和Windows上都能工作,所以如果能覆盖这三个选项,然后用Python代码在后续的脚本/项目中通用,那就太理想了。我是不是对这个脚本的要求太高了,希望它能在Linux、Mac和Windows上都能运行?
5 个回答
你可能会发现使用比Tk更高级的图形用户界面工具包会更好,但因为Tk是标准库的一部分,所以到处都可以用。
下面是一个非常简单的例子:
import Tkinter
root = Tkinter.Tk()
root.withdraw() # Hide the main window (optional)
text_in_clipboard = root.clipboard_get()
print text_in_clipboard
xerox这个库可以在Linux、Mac OS X和Windows上使用。
需要注意的是,频繁地进行任何操作(比如每隔不到一分钟就操作一次)是个很糟糕的主意,因为这样会让现代处理器频繁地唤醒。你可以考虑使用各个操作系统提供的接口,当剪贴板内容发生变化时注册一个回调函数。
你可以使用像Qt这样的图形用户界面工具包来获取一个可移植的剪贴板API。不过,单单为了这个功能使用整个图形工具包可能有点过于复杂了。(当然,如果你还打算用它来制作图形界面,那就另当别论了。)
不过,处理纯文本的剪贴板API应该相对简单,你可以自己做一个封装。
举个例子,在OS X上,你可以使用PyObjC(这个在OS X安装时就会自带)来获取剪贴板中的纯文本内容:
from AppKit import NSPasteboard
from LaunchServices import
pb = NSPasteboard.generalPasteboard()
text = pb.stringForType_(kUTTypeUTF8PlainText)
CPU架构
在64位操作系统上运行的32位本地应用程序会访问与64位应用程序相同的剪贴板。如果你需要支持操作系统的两种架构,并且不是在写驱动程序,对于Windows来说,提供一个32位的版本是可以的;对于Linux,你可能需要同时提供两个版本;而对于OS X,提供一个64位版本应该是比较安全的,因为自2007年中期以来,所有的Mac都配备了64位的CPU,并且自Leopard以来操作系统也支持64位。一个Python脚本在Linux上通常会由发行版的包管理器中的Python安装来执行,这样它的位数会和系统匹配,所以你不必太担心这个问题。