2011-08-16 1 views

ответ

12

PyObjC это путь:

#!/usr/bin/python 

from AppKit import * 

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

Это поддерживает только текст и будет возвращать None иначе. Вы можете расширить его для поддержки других типов данных, см. NSPastboard Class Reference.

2

Знаете ли вы, что PyObjC? Думаю, вы могли бы использовать его для написания обертки Py, которая взаимодействует с NSPasteboard. Это может быть более «изящным», чем обтекание pbpaste.

+1

Если бы я знал PyObjC, я бы не писал приложения Mac в Python;) –

13

Вы просмотрели модуль xerox?
Предполагается поддерживать Windows, OS X и Linux


Использование выглядит следующим образом:

xerox.copy (u'some строка ')

И наклеить :

>>> xerox.paste()
u'some строка»

+0

Лучше (проще, легче), чем принятый ответ. +1. – noamtm

+0

Возможно, слишком мало света: на OS X модуль 'xerox' является только оберткой вокруг' pbcopy' и 'pbpaste'. – alexis

5

Проблема с модулем xerox и большинством примеров кода, которые я нашел для «получения содержимого буфера обмена Mac», заключается в том, что они возвращают только обычный текст. Они не поддерживают гиперссылки, стили и т. Д., Поэтому они не могут получить доступ к полному содержимому, предоставляемому такими приложениями, как Microsoft Word и Google Chrome.

Стоя на плечах других людей, я, наконец, понял, как это сделать. Результирующий модуль richxerox доступен на PyPI и Bitbucket.

Хотя этот вопрос старый, я оставляю здесь панировочные сухари, потому что я последовательно пересматривал эту страницу через Google, ища ответ.

+0

'richxerox' отлично смотрится! Я искал что-то вроде этого. Раздражающий сбой: хотя он устанавливается на Python 3, это код Python 2. Зачем? Он легко обновляется. – alexis

+0

Я имею в виду, что версия, в которой 'pip' установлена ​​(0.129), имеет команды' print' без круглых скобок, у нее есть 'iteritems()' и т. Д. Это несовместимо с python 3 и ошибки на 'import richxerox'. Есть ли версия, которую я могу задать «pip» за то, что будет работать? Который из? (Я спрашиваю об этом, потому что видел месячный отчет об ошибках последних версий). – alexis

+0

Ха, я думаю, это проблема семантики: '129> 6' :-) Я принесу правильную версию, спасибо. (К сожалению, 'pip' не смог построить PyObjC в моем блоке El Capitan, поэтому я не смогу его протестировать с помощью python 3.) – alexis