用一个Python脚本在Linux,Mac和Windows上复制剪贴板中的数据

我正在尝试在Python中创build一个脚本,它将收集用户放入剪贴板的数据,并最好将其保存为列表或文本文件或string/数组/variables,以便以后使用。

这应该在Linux的所有版本(我会承担Ubuntu),Mac OS所有版本和Windows所有版本。 我不知道32位和64位系统是否有不同的方式来访问剪贴板上的数据,如果他们这样做我想这是32位版本的工作是安全的,所以运行64位版本的人可以回落到32位操作系统的版本。

除了必须处理上述操作系统之外,棘手的部分是,只要用户不停止脚本,我就希望脚本运行,而在运行过程中,用户复制到剪贴板的所有数据都将被复制列表或文本文件或string/数组/variables。

当然,用户可以在剪贴板中input数据的时间是有限制的,所以我正在考虑每隔一秒或每500毫秒进行一次循环扫描,检查内容是否已经改变,如果已经复制,否则不要复制它。

有没有一个统一的方式或模块在所有不同的操作系统上执行此操作,还是为各种操作系统编写用于此任务的独立脚本更好?

问题是,这是我希望在Linux,Mac和Windows上开展工作的一个更大的项目的一部分,因此将这三个选项覆盖,然后使用Python代码在脚本的其余部分可以在所提到的操作系统上使用/项目将是理想的。 我从这个脚本中总得问得太多了,不得不在Linux,Mac和Windows上工作?

Solutions Collecting From Web of "用一个Python脚本在Linux,Mac和Windows上复制剪贴板中的数据"

你可以使用像Qt这样的GUI工具包来获得一个可移植的剪贴板API。 这就是说为了这个,使用一个完整的GUI工具包可能有点矫枉过正。 (当然,除非你也用它来制作GUI。)

也就是说,处理纯文本的剪贴板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以来,操作系统支持就已经存在。 在Linux上,一个Python脚本可能会由发行包管理器的Python安装执行,它的位数将与系统匹配,所以你不一定需要担心这个问题。

你可能比Tk使用更先进的gui工具包更好,但它在标准库中,所以无处不在。

作为一个非常简单的例子:

 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。

请注意,在短时间内(<一分钟)执行任何操作都是非常糟糕的主意,因为这会使现代处理器经常醒来。 剪贴板更改后,您可能希望使用相应的操作系统的API来注册回调。

轮询不健壮/可靠。

你不能确定数据是否已经改变(在窗口上),而不粘贴到缓冲区进行检查。 这需要打开剪贴板。 如果你在循环中这样做,你会碰撞其他应用程序。 即用户将其他项目复制到剪贴板上的应用程序。 这将爆炸与“不能打开剪贴板”或“内存不足”的错误。 这种方法不能可靠/有力地工作。 您需要在各种平台上使用适当的剪贴板监视API。