¿Puede Python enviar texto al portapapeles de Mac?
Pregunta
Me gustaría que mi programa Python coloque texto en el portapapeles de Mac.
¿Es esto posible?
Solución
Nueva respuesta:
Esta página sugiere:
Implementación para todos los Mac OS X Versiones
El otro módulo Mac (MacSharedClipboard.py, en el Listado 4) implementa la interfaz del portapapeles en parte superior de dos programas de línea de comandos llamado pbcopy (que copia texto en el portapapeles) y pbpaste (que pega cualquier texto que esté en el portapapeles). El prefijo '' pb '' representa " cartón, " el término Mac para portapapeles.
Respuesta anterior:
Aparentemente así:
http://code.activestate.com/recipes/410615/
es un script simple que muestra cómo hacerlo.
Editar: Acabo de darme cuenta de que esto se basa en el carbono, por lo que podría no ser ideal ... depende un poco para qué lo estés usando.
Otros consejos
Cómo escribir una cadena Unicode en el portapapeles de Mac:
import subprocess
def write_to_clipboard(output):
process = subprocess.Popen(
'pbcopy', env={'LANG': 'en_US.UTF-8'}, stdin=subprocess.PIPE)
process.communicate(output.encode('utf-8'))
Cómo leer una cadena Unicode desde el portapapeles de Mac:
import subprocess
def read_from_clipboard():
return subprocess.check_output(
'pbpaste', env={'LANG': 'en_US.UTF-8'}).decode('utf-8')
Funciona tanto en Python 2.7 como en Python 3.4.
El siguiente código usa PyObjC ( http://pyobjc.sourceforge.net/ )
from AppKit import NSPasteboard, NSArray
pb = NSPasteboard.generalPasteboard()
pb.clearContents()
a = NSArray.arrayWithObject_("hello world")
pb.writeObjects_(a)
Como explicado en la documentación de Cocoa , la copia requiere tres pasos:
- obtener el cartón
- borrarlo
- llénalo
Rellena el cartón con una matriz de objetos (aquí a
contiene solo una cadena).
Una forma simple:
cmd = 'echo %s | tr -d "\n" | pbcopy' % str
os.system(cmd)
Una manera multiplataforma:
https://stackoverflow.com/a/4203897/805627
from Tkinter import Tk
r = Tk()
r.withdraw()
r.clipboard_clear()
r.clipboard_append('i can has clipboardz?')
r.destroy()
Sé que esta es una publicación anterior, pero he encontrado una solución muy elegante para este problema.
Hay una biblioteca llamada PyClip , que se puede encontrar en https: / /github.com/georgefs/pyclip-copycat .
La sintaxis es bastante simple (ejemplo del repositorio de Github):
import clipboard
# copy some text to the clipboard
clipboard.copy('blah blah blah')
# get the text currently held in the clipboard
text = clipboard.paste()
una vez que haya pasado clipboard.copy ('foo')
puede simplemente cmd + v para obtener el texto
si solo desea poner texto en el portapapeles de mac, puede usar el comando pbcopy del shell.