开发者

Python get mac clipboard contents

开发者 https://www.devze.com 2023-03-29 01:00 出处:网络
How can I, using Py开发者_如何学Cthon (2.7) get the contents of the Mac clipboard. Is there a better way than making a wrapper around pbpaste?

How can I, using Py开发者_如何学Cthon (2.7) get the contents of the Mac clipboard. Is there a better way than making a wrapper around pbpaste?

Thanks!


PyObjC is the way to go:

#!/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)

This only supports text and will return None otherwise. You can extend it to support other data types as well, see NSPastboard Class Reference.


Have you looked at the xerox module?
It is supposed to support windows, OS X and Linux


Usage is as follows:

xerox.copy(u'some string')

And to paste:

>>> xerox.paste()
u'some string'


If you have installed pandas, you can use the function in pandas as follows:

from pandas.io.clipboard import clipboard_get
text = clipboard_get()                                                     


The problem with the xerox module and most code samples I've found for "get the contents of the Mac clipboard" is that they return plain text only. They don't support hyperlinks, styles, and such, so they're not really able to access the full contents provided by apps like Microsoft Word and Google Chrome.

Standing on the shoulders of others, I finally figured out how to do this. The resulting richxerox module is available on PyPI and Bitbucket.

Though this question is old, I'm leaving breadcrumbs here because I consistently re-found this page via Google while searching for the answer.


Do you know PyObjC? I guess you could use it to write a Py wrapper which interfaces with NSPasteboard. This might be more "elegant" than shelling out to pbpaste.


You can grab the clipboard (and the screen) with PIL/Pillow on a Mac like this:

from PIL import ImageGrab, Image

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

Just for completeness, you can grab the screen like this:

screen = ImageGrab.grab()

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

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

精彩评论

暂无评论...
验证码 换一张
取 消