Me gustaría que mi programa python coloque texto en el portapapeles de Mac.¿Puede Python enviar texto al portapapeles de Mac?
¿Esto es posible?
Me gustaría que mi programa python coloque texto en el portapapeles de Mac.¿Puede Python enviar texto al portapapeles de Mac?
¿Esto es posible?
Nueva respuesta:
This page sugiere:
Implementación para Todos 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 comandos -line programas llamado pbcopy (que copia el texto en el portapapeles) y pbpaste (que pega cualquier texto que esté en el portapapeles ). El prefijo "pb" significa "pasteboard", el término Mac para el portapapeles .
vieja respuesta:
Parece que sí:
http://code.activestate.com/recipes/410615/
es un simple script que demuestra cómo hacerlo.
Editar: Me acabo de dar cuenta de que esto se basa en carbono, por lo que podría no ser ideal ... depende un poco para lo que lo está usando.
La siguiente utilice el código de PyObjC (http://pyobjc.sourceforge.net/)
from AppKit import NSPasteboard, NSArray
pb = NSPasteboard.generalPasteboard()
pb.clearContents()
a = NSArray.arrayWithObject_("hello world")
pb.writeObjects_(a)
Como explained in Cocoa documentation, copia requiere tres pasos:
Rellena el portapapeles con una matriz de objetos (aquí a
contiene solo una cadena).
si solo desea poner texto en el portapapeles del mac, puede usar el comando pbcopy del intérprete de comandos.
Si es un comando python supercorto, puede canalizar la salida del comando a pbcopy de la siguiente manera: python -c "print 'hi'" | pbcopy. También puede incluir un grupo de comandos consecutivos: python -c 'import time, sys; sys.stdout.write (str (int (time.time()))) '| pbcopy. Éste copia el tiempo de Unix sin la nueva línea al portapapeles. –
Una manera simple:
cmd = 'echo %s | tr -d "\n" | pbcopy' % str
os.system(cmd)
Una forma 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()
Esto no parece funcionar en mi OS X 10.8. – Vojto
El bloque de código # 1 probablemente no funciona si el texto que se va a escribir en el portapapeles contiene Unicode o caracteres de shell como | o & El bloque de código n. ° 2 crea un icono de dock extra en OS X. He proporcionado mi propia respuesta a esta pregunta que no tiene estos problemas. –
Cómo escribir una cadena Unicode en el portapapeles 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 para 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.
No tengo idea de por qué este tiene tan poco amor, es de lejos el método más elegante y confiable en esta página – zsero
Por qué gracias. Necesitaba escribir esta función para enviar texto en japonés a través del portapapeles, así que tuve que hacerlo funcionar con Unicode. –
Excelente. Muy útil en una función de utilidad para limpiar extractos de archivos pdf JSTOR; Gracias. – cphlewis
Sé que esta es una publicación anterior, pero encontré 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 desde el 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()
vez que haya pasado clipboard.copy('foo')
que sólo puede cmd + v para obtener el texto
nunca pensé de utilizar una herramienta de línea de comandos. Perfecto, gracias –
Ese ejemplo de código no maneja las cadenas Unicode correctamente. He proporcionado una solución consciente de Unicode como una respuesta separada. –