Python获取Mac剪贴板内容

18

我如何使用Python(2.7)获取Mac剪贴板的内容?是否有比创建pbpaste包装器更好的方法?

谢谢!

6个回答

20

PyObjC 是一个好选择:

#!/usr/bin/python

from AppKit import NSPasteboard, NSStringPboardType

pb = NSPasteboard.generalPasteboard()
pbstring = pb.stringForType_(NSStringPboardType)
print u"Pastboard string: %s".encode("utf-8") % repr(pbstring)

该函数仅支持文本,否则将返回None。您可以扩展它以支持其他数据类型,参见NSPastboard类参考


1
在 Py3,OS 11.1 上:print("剪贴板字符串:%s" % pbstring) - magicrebirth

16

您有没有看过xerox模块?
它应该支持Windows、OS X和Linux。


使用方法如下:

xerox.copy(u'一些字符串')

然后粘贴:

>>> xerox.paste()
u'一些字符串'


1
可能有点过于简略:在OS X上,“xerox”模块只是“pbcopy”和“pbpaste”的包装器。 - alexis

6
如果你已经安装了pandas,你可以按照以下方式使用其中的函数:
from pandas.io.clipboard import clipboard_get
text = clipboard_get()                                                     

5
xerox模块和大多数“获取Mac剪贴板内容”的代码示例存在问题,它们仅返回纯文本。它们不支持超链接、样式等,因此无法访问Microsoft Word和Google Chrome等应用程序提供的完整内容。
在其他人的基础上,我最终找到了解决方法。生成的richxerox模块可在PyPIBitbucket上获得。
虽然这个问题很旧,但我留下线索,因为我在搜索答案时一直通过谷歌找到这个页面。

"richxerox" 看起来很棒!我一直在寻找这样的东西。令人烦恼的故障:虽然它可以安装在 Python 3 上,但它是 Python 2 代码。为什么?它很容易升级。 - alexis
我的意思是,pip 安装的版本(0.129)使用没有括号的 print 语句,它有 iteritems() 等等。它不兼容 Python 3,并且在 import richxerox 上出现错误。是否有一个版本我可以向 pip 请求以使其正常工作?哪一个版本?(我提问这个问题是因为我看到了一个几个月前关于最近版本破损的 bug 报告)。 - alexis
哈,我猜这是一个语义问题:129 > 6 :-) 我会获取正确的版本,谢谢。 (不幸的是,在我的 El Capitan 系统上,pip 未能构建 PyObjC,所以我将无法使用 Python 3 实际测试它。) - alexis
让我们在聊天中继续这个讨论 - alexis
还可以考虑使用jaraco.clipboard,在Mac上使用richxerox(并排除旧版本如0.129),并在Windows上提供相同的接口。 - Jason R. Coombs

3

你知道PyObjC吗?我猜你可以使用它编写一个Py封装器,与NSPasteboard进行接口交互。这可能比使用pbpaste更加"优雅"。


1
如果我懂PyObjC,我就不会用Python编写Mac应用程序了 ;) - user825286

0

在 Mac 上,您可以使用 PIL/Pillow 这样的工具来获取剪贴板(和屏幕):

from PIL import ImageGrab, Image

# Grab clipboard and save to disk
clip = ImageGrab.grabclipboard()
clip.save("clip.png")

为了完整起见,您可以像这样抓取屏幕:

screen = ImageGrab.grab()

# That results in this:
# <PIL.PngImagePlugin.PngImageFile image mode=RGBA size=5120x2880 at 0x110BB7748>

# Save to disk
screen.save("screen.png")

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接