¿Cómo leo el texto desde el portapapeles (windows) de python?

¿Cómo leo el texto desde el portapapeles (windows) de python?

Puede usar el módulo llamado win32clipboard , que es parte de pywin32 .

Aquí hay un ejemplo que primero establece los datos del portapapeles y luego los obtiene:

import win32clipboard # set clipboard data win32clipboard.OpenClipboard() win32clipboard.EmptyClipboard() win32clipboard.SetClipboardText('testing 123') win32clipboard.CloseClipboard() # get clipboard data win32clipboard.OpenClipboard() data = win32clipboard.GetClipboardData() win32clipboard.CloseClipboard() print data 

Un importante recordatorio de la documentación:

Cuando la ventana haya terminado de examinar o cambiar el portapapeles, cierre el portapapeles llamando a CloseClipboard. Esto permite que otras ventanas accedan al portapapeles. No coloque un objeto en el portapapeles después de llamar a CloseClipboard.

puede hacerlo fácilmente a través del módulo incorporado Tkinter, que es básicamente una biblioteca GUI. Este código crea un widget en blanco para obtener el contenido del portapapeles del sistema operativo.

 #from tkinter import Tk # Python 3 from Tkinter import Tk Tk().clipboard_get() 

He visto muchas sugerencias para usar el módulo win32, pero Tkinter proporciona el método más corto y sencillo que he visto, como en esta publicación: ¿Cómo copio una cadena en el portapapeles en Windows usando Python?

Además, Tkinter está en la biblioteca estándar de python.

Si no desea instalar paquetes adicionales, ctypes puede hacer el trabajo también.

 import ctypes CF_TEXT = 1 kernel32 = ctypes.windll.kernel32 kernel32.GlobalLock.argtypes = [ctypes.c_void_p] kernel32.GlobalLock.restype = ctypes.c_void_p kernel32.GlobalUnlock.argtypes = [ctypes.c_void_p] user32 = ctypes.windll.user32 user32.GetClipboardData.restype = ctypes.c_void_p def get_clipboard_text(): user32.OpenClipboard(0) try: if user32.IsClipboardFormatAvailable(CF_TEXT): data = user32.GetClipboardData(CF_TEXT) data_locked = kernel32.GlobalLock(data) text = ctypes.c_char_p(data_locked) value = text.value kernel32.GlobalUnlock(data_locked) return value finally: user32.CloseClipboard() print(get_clipboard_text()) 

La respuesta con más votos arriba es rara de una manera que simplemente borra el Portapapeles y luego obtiene el contenido (que luego está vacío). Uno podría borrar el portapapeles para asegurarse de que algún tipo de contenido del portapapeles como “texto con formato” no “cubra” el contenido de texto sin formato que desea guardar en el portapapeles.

El siguiente fragmento de código reemplaza todas las nuevas líneas en el portapapeles por espacios, luego elimina todos los espacios dobles y finalmente guarda el contenido en el portapapeles:

 import win32clipboard win32clipboard.OpenClipboard() c = win32clipboard.GetClipboardData() win32clipboard.EmptyClipboard() c = c.replace('\n', ' ') c = c.replace('\r', ' ') while c.find(' ') != -1: c = c.replace(' ', ' ') win32clipboard.SetClipboardText(c) win32clipboard.CloseClipboard() 

Descubrí que esta era la forma más fácil de acceder al portapapeles desde python:

1) Install pyperclip: pip install pyperclip

2) Uso:

 import pyperclip s = pyperclip.paste() pyperclip.copy(s) # the type of s is string 

Probado en Win10 de 64 bits, Python 3.5. También parece funcionar con caracteres que no son ASCII. Los caracteres probados incluyen ± ° ©⇒ αβγθΔΨΦåäö

Prueba win32clipboard del paquete win32all (probablemente esté instalado si estás en ActiveState Python).

Vea el ejemplo aquí: http://code.activestate.com/recipes/474121/

Para mi progtwig de consola, las respuestas con tkinter de arriba no funcionaron del todo porque el .destroy () siempre daba un error:

no se puede invocar el comando “evento”: la aplicación se ha destruido al ejecutar …

o al usar .withdraw () la ventana de la consola no recuperó el enfoque.

Para resolver esto, también tiene que llamar a .update () antes de .destroy (). Ejemplo:

 # Python 3 import tkinter r = tkinter.Tk() text = r.clipboard_get() r.withdraw() r.update() r.destroy() 

R.withdraw () evita que el fotogtwig se muestre durante milisegundos, y luego se destruirá devolviendo el enfoque a la consola.

Usa el portapapeles de la biblioteca de Pythons

Simplemente se usa así:

 import clipboard clipboard.copy("this text is now in the clipboard") print clipboard.paste() 

La biblioteca estándar de python lo hace …

 try: # Python2 import Tkinter as tk except ImportError: # Python3 import tkinter as tk def getClipboardText(): root = tk.Tk() # keep the window from showing root.withdraw() return root.clipboard_get()