Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用单个Python脚本从Linux、Mac和Windows上的剪贴板复制数据_Python_Windows_Linux_Macos_Clipboard - Fatal编程技术网

使用单个Python脚本从Linux、Mac和Windows上的剪贴板复制数据

使用单个Python脚本从Linux、Mac和Windows上的剪贴板复制数据,python,windows,linux,macos,clipboard,Python,Windows,Linux,Macos,Clipboard,我正在尝试用Python创建一个脚本,该脚本将收集用户放入剪贴板的数据,最好将其保存为列表或文本文件或字符串/数组/变量,以便以后使用 这应该适用于Linux所有版本(我假设是Ubuntu)、Mac OS所有版本和Windows所有版本。我不确定32位和64位系统是否有不同的方式访问剪贴板上的数据,如果有,我想只有在32位版本下才安全,这样运行64位版本的人才能回到32位版本的操作系统上 除了必须在上面提到的操作系统上工作之外,还有一个棘手的部分,那就是我希望脚本能够运行,只要用户不停止它,并且

我正在尝试用Python创建一个脚本,该脚本将收集用户放入剪贴板的数据,最好将其保存为列表或文本文件或字符串/数组/变量,以便以后使用

这应该适用于Linux所有版本(我假设是Ubuntu)、Mac OS所有版本和Windows所有版本。我不确定32位和64位系统是否有不同的方式访问剪贴板上的数据,如果有,我想只有在32位版本下才安全,这样运行64位版本的人才能回到32位版本的操作系统上

除了必须在上面提到的操作系统上工作之外,还有一个棘手的部分,那就是我希望脚本能够运行,只要用户不停止它,并且当它运行时,用户复制到剪贴板中的所有数据都被复制到列表或文本文件或字符串/数组/变量中

当然,用户可以将数据输入剪贴板有一个时间限制,所以我想让一个循环每秒钟或每500毫秒扫描一次剪贴板,检查内容是否已更改,如果已更改,请复制它,否则不要复制它

是否有一种统一的方式或模块可以在所有不同的操作系统上执行此任务,或者为不同的操作系统编写单独的脚本会更好

问题是,这是一个更大的项目的一部分,我想让它在Linux、Mac和Windows上工作,因此涵盖这三个选项,然后使用Python代码,可以在脚本/项目的其余部分在上述操作系统中使用,这将是理想的。我对这个脚本的要求是否过于笼统,因为它必须在Linux、Mac和Windows上工作?

该库支持Linux、Mac OS X和Windows


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

您可以使用GUI工具包(如Qt)来获取可移植的剪贴板API。也就是说,仅仅为此使用一个完整的GUI工具包可能有点过头了。(当然,除非您还打算使用它来制作GUI。)

这就是说,处理纯文本的剪贴板API应该相当简单,以便您自己进行抽象

例如,在OS X上,您可以使用(与OS X一起安装)获取剪贴板的纯文本内容:

from AppKit import NSPasteboard
from LaunchServices import 
pb = NSPasteboard.generalPasteboard()
text = pb.stringForType_(kUTTypeUTF8PlainText)
CPU架构
64位操作系统上的32位本机应用程序将访问与64位应用程序相同的剪贴板。如果您需要支持操作系统的两种体系结构,并且没有编写驱动程序,那么对于Windows,可以提供32位二进制文件;对于Linux,您可能必须同时执行两个版本;对于OSX来说,发布64位版本应该是相当安全的,自2007年年中以来,所有Mac都有64位CPU,自Leopard以来,OS支持就一直存在。在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

轮询不可靠


如果不将数据粘贴到缓冲区进行检查,则无法确定数据是否已更改(在windows上)。这需要打开剪贴板。如果你在循环中这样做,你将与其他应用程序发生冲突。i、 e.用户将另一项复制到剪贴板上的应用程序。这将导致“无法打开剪贴板”或“内存不足”错误。这种方法无法可靠/稳健地工作。您需要在各种平台中使用适当的剪贴板监控API

我怀疑也可以通过以下链接使用pythonnet+TextCopy库以平台无关的方式复制剪贴板:

(参见此处的类似问题:)


但我自己还没有尝试过,可能还需要考虑运行哪种命令以及从哪个控制台运行。如果有人要尝试,请告诉我,我将在此处更新更多详细信息。

首先,并非所有Linux都有剪贴板。因此xerox.copy(u)将在任何提到的操作系统上获取剪贴板中的任何内容,并将其复制到我指定的变量?对我来说,我刚刚开始学习Python,看起来我可以使用xerox复制并粘贴我在脚本中指定的字符串,而不是将剪贴板中的内容作为脚本中的用户输入变量。这是否正确?仅供参考:
xerox
要求在linux系统上安装
xclip
<默认情况下,大多数发行版都不包括code>xclip。是的,感谢您注册回调,这是我一定会考虑的!所以这真的意味着将代码拆分成各种操作系统API,是吗?我想我可以在一开始就定义它,然后所有操作系统都可以在一个brnach中读取代码,而不是有三个代码分支,每个分支用于不同的操作系统,我的假设正确吗?@JoeKington谢谢,你还知道它是可以从剪贴板复制还是从脚本中定义的代码复制到它吗?我希望定期从剪贴板复制数据,并将其放入一个数组或字符串中,供脚本稍后使用。施乐可以从剪贴板复制而不必事先在剪贴板中放入任何内容?@lowtechsun是的,只需阅读
sys.platform
,然后根据这一点决定采取哪个分支。施乐只读取当前剪贴板,不管是谁设置的。请注意,Unix系统上可能有多个剪贴板,尤其是Linux。我可以举个例子吗?剪贴板上的数据将仅为URL。我正在写一个下载程序。它从