Pregunta

Me gustaría que mi programa Python coloque texto en el portapapeles de Mac.

¿Es esto posible?

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top