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 recordatorio importante 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.
¿Sabes si hay alguna forma de usar la instrucción `with´?
Norfeldt
3
Vale la pena señalar que en py34, win7, SetClipboardText no funcionó sin una llamada anterior a EmptyClipboard
CoderTao
Este módulo es útil si desea realizar operaciones más complejas, por ejemplo, sacar el contenido con formato HTML del portapapeles. Ver stackoverflow.com/questions/17298897/…
xji
2
@Norfeldt Si no hay una forma nativa, puede crear fácilmente su propio objeto personalizado que admita "con"
Elijas Dapšauskas
39
puede hacer esto 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.
Algún código que obtendrá el valor del portapapeles a través de Tkinter: from Tkinter import Tk [\ nl] r = Tk () [\ nl] result = r.selection_get (selection = "CLIPBOARD") [\ nl] r.destroy ()
mgkrebbs
18
Si no desea instalar paquetes adicionales, también ctypespuede hacer el trabajo.
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())
¿Es adecuado para 3.6? se instala con éxito pero cuando se usa el método paste () me da un error: "de la versión de importación de PySide como PYSIDE_VERSION # análisis: ignorar ModuleNotFoundError: No hay módulo llamado 'PySide'". Cuando intenté instalar Pyside, dice que no es compatible con 3.6
gaurav
Sí, debería funcionar en Python 3.6, y acabo de probar con Python 3.7.4 (64 bits). Mirando el setup.py del paquete, no debería tener dependencias con Pyside o cualquier otro paquete. ¿Estás seguro de que el comando pegar está intentando usar Pyside?
np8
Sí, el comando de pegar está buscando Pyside y como Pyside solo admite hasta Python 3.4, da un error
gaurav
Parece ser la solución más simple para WSL con python3.6
registró el
11
La respuesta más votada arriba es extraña de una manera que simplemente borra el Portapapeles y luego obtiene el contenido (que luego está vacío). Uno podría limpiar el portapapeles para asegurarse de que algún tipo de contenido del portapapeles como "texto formateado" no "cubra" el contenido de texto sin formato que desea guardar en el portapapeles.
El siguiente fragmento de código reemplaza todas las líneas nuevas 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()
Respuestas:
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:
Un recordatorio importante de la documentación:
fuente
puede hacer esto 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.
fuente
tkinter
lugar deTkinter
. De lo contrario, no funcionó en mi python 3.7.3 64bit win10.He visto muchas sugerencias para usar el módulo win32, pero Tkinter proporciona el método más corto y fácil que he visto, como en esta publicación: ¿Cómo copio una cadena al portapapeles en Windows usando Python?
Además, Tkinter está en la biblioteca estándar de Python.
fuente
Si no desea instalar paquetes adicionales, también
ctypes
puede hacer el trabajo.fuente
Descubrí que esta era la forma más fácil de acceder al portapapeles desde Python:
1) Instale pyperclip:
pip install pyperclip
2) uso:
Probado en Win10 de 64 bits, Python 3.5 y Python 3.7.3 (64 bits). Parece que también funciona con caracteres que no son ASCII. Los caracteres probados incluyen ± ° © © αβγθΔΨΦåäö
fuente
La respuesta más votada arriba es extraña de una manera que simplemente borra el Portapapeles y luego obtiene el contenido (que luego está vacío). Uno podría limpiar el portapapeles para asegurarse de que algún tipo de contenido del portapapeles como "texto formateado" no "cubra" el contenido de texto sin formato que desea guardar en el portapapeles.
El siguiente fragmento de código reemplaza todas las líneas nuevas en el portapapeles por espacios, luego elimina todos los espacios dobles y finalmente guarda el contenido en el portapapeles:
fuente
La biblioteca estándar de Python lo hace ...
fuente
Pruebe win32clipboard desde el paquete win32all (que probablemente esté instalado si está en ActiveState Python).
Vea la muestra aquí: http://code.activestate.com/recipes/474121/
fuente
Para el programa de mi consola, las respuestas con tkinter anteriores no me funcionaron porque el .destroy () siempre dio un error:
o al usar .withdraw () la ventana de la consola no recuperó el foco.
Para resolver esto, también debe llamar a .update () antes de .destroy (). Ejemplo:
El r.withdraw () evita que el marco se muestre durante un milisegundo, y luego se destruirá devolviendo el foco a la consola.
fuente
Usar el Portapapeles de la biblioteca de Pythons
Simplemente se usa así:
fuente
from pyperclip import copy, paste
.Un truco no muy directo:
Utilice la tecla de acceso rápido pyautogui:
Por lo tanto, puede pegar los datos del portapapeles como desee.
fuente