2011-08-16 16 views

Respuesta

12

PyObjC es el camino a seguir:

#!/usr/bin/python 

from AppKit import * 

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

Esto sólo es compatible con el texto y volverá None lo contrario. Puede ampliarlo para que sea compatible con otros tipos de datos, consulte NSPastboard Class Reference.

2

¿Conoces PyObjC? Supongo que podrías usarlo para escribir un envoltorio Py que interactúa con NSPasteboard. Esto podría ser más "elegante" que bombardear a pbpaste.

+1

Si conociera PyObjC, no estaría escribiendo aplicaciones Mac en Python;) –

13

¿Has mirado el módulo xerox?
que se supone que son compatibles con Windows, OS X y Linux


uso es el siguiente:

xerox.copy (u'some cadena ')

Y para pegar :

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

+0

Mejor (más simple, más ligero) que la respuesta aceptada. +1. – noamtm

+0

Tal vez un poco demasiado liviano: en OS X, el módulo 'xerox' es solo un envoltorio alrededor de' pbcopy' y 'pbpaste'. – alexis

5

El problema con el módulo xerox y la mayoría de los ejemplos de código que he encontrado para "obtener el contenido del portapapeles de Mac" es que solo devuelven texto sin formato. No admiten hipervínculos, estilos, etc., por lo que no pueden acceder a todos los contenidos proporcionados por aplicaciones como Microsoft Word y Google Chrome.

De pie sobre los hombros de los demás, finalmente descubrí cómo hacerlo. El módulo resultante richxerox está disponible en PyPI y Bitbucket.

Aunque esta pregunta es antigua, dejaré las migas de pan aquí porque constantemente volví a encontrar esta página a través de Google mientras buscaba la respuesta.

+0

'richxerox' se ve genial! He estado buscando algo como esto. Glitch molesto: aunque se instala en Python 3, es el código de Python 2. ¿Por qué? Se actualiza fácilmente. – alexis

+0

Me refiero a que la versión que 'pip' instaló (0.129) tiene declaraciones 'print' sin paréntesis, tiene' iteritems() ', etc. No es compatible con python 3, y comete errores en' import richxerox'. ¿Hay alguna versión que pueda preguntarle a 'pip' qué va a funcionar? ¿Cúal? (Pregunto esto porque vi un informe de error de meses de antigüedad sobre versiones recientes). – alexis

+0

Ha, supongo que es un problema de semántica: '129> 6' :-) Buscaré la versión correcta, gracias. (Desafortunadamente 'pip' no pudo construir PyObjC en mi casilla El Capitan, así que no podré probarlo realmente con Python 3.) – alexis

Cuestiones relacionadas