从python访问备用剪贴板格式

从支持富文本的应用程序复制到剪贴板通常会以多种格式添加文本。 我需要找出可用的格式,然后以选定的格式检索剪贴板内容。 万一它很重要,我对丰富的文本格式(从Word,Acrobat,浏览器,…)感兴趣,而不是在图像数据或其他新奇 。

我看了看,但我发现的解决scheme仅限于纯文本, 超级过时 ,特定于Windows(我在OS X上), 依赖于命令行工具pbcopypbpaste (它不处理所有剪贴板格式),或上面的几个。

所以:我如何获得剪贴板中存在的格式列表,并以我select的格式提取其内容?

平台,为了兴趣的顺序:系统无关(我希望),OS X山狮(我目前的平台)或类似的,其他平台(我计划分发我的代码)。

选定的链接

pyperclip :看起来很有意思,但是在OS X上它委托给pbcopypbpaste ,它们只支持textrtfps格式。

这个来自activestate的配方仅适用于Windows,但是展示了如何获得HTML。 ( 这个问题是指这个问题)。

这个答案也是win32clipboard的具体内容。

这个问题是关于拖放文件到剪贴板(在Windows上)。 有趣的,但没有我所需要的帮助。

这种基于 tkinter 的解决scheme很简单,仍然可以在OS X上运行,但它只能得到纯文本,而且我没有发现tkinter可以处理其他任何事情的证据。

这显示了文本放在剪贴板上的近乎相同的tkinter代码。

编辑(2017年5月)

我现在有一个OS X的解决scheme,但我很希望听到如果(以及如何) pyperclip或其他模块可以在Windows上做同样的事情。 Pyperclip深入Windows API,所以它不能很好地支持所有可用格式的列表和select。

在OS X上可以通过pypi上的richxerox模块获得相当简单的结果。 它需要系统支持,包括Apple AppKitFoundation模块。 我在为Python 3构建Objective C时遇到了困难,因此最初我只能将它用于Python 2.然而,Anaconda 3预装了所有必需的组件。

这里是一个演示,打印可用的剪贴板类型,然后提取和打印每一个:

 import richxerox as rx # Dump formats verbose = True if verbose: print(rx.available(neat=False, dyn=True)) else: print(rx.available()) # Dump contents in all formats for k, v in rx.pasteall(neat=False, dyn=True).items(): line = "\n*** "+k+": "+v print(line) 

输出:

 ( "public.html", "public.utf8-plain-text" ) *** public.html: <html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"> </head><body><a href="http://coffeeghost.net/2010/10/09/pyperclip-a-cross-platform-clipboard-module-for-python/" rel="nofollow noreferrer">pyperclip</a>: Looks interesting</body></html> *** public.utf8-plain-text: pyperclip: Looks interesting 

要以回退到文本的方式打印所需的格式,可以使用以下命令:

 paste_format = "rtf" content = rx.paste(paste_format) if not content: content = rx.paste("text") 

或者你可以先检查一下格式是否可用:

 if "public.rtf" in rx.available(): content = rx.paste("rtf") else: content = rx.paste("text")