¿Cómo copio una cadena al portapapeles en Windows usando Python?
193
Estoy tratando de hacer una aplicación básica de Windows que construya una cadena a partir de la entrada del usuario y luego la agregue al portapapeles. ¿Cómo copio una cadena al portapapeles usando Python?
jaraco.clipboard lo hace (también): clipboard.copy (variable)
JinSnow
También vea mi respuesta a una pregunta relacionada sobre cómo copiar al portapapeles usando Tkinter sin mostrar una ventana. Incluye una función de Python que reemplaza / devuelve el texto del portapapeles usando Tkinter.
Edward
Respuestas:
285
En realidad, pywin32y ctypesparece ser una exageración para esta simple tarea. Tkinteres un marco GUI multiplataforma, que se entrega con Python por defecto y tiene métodos de acceso al portapapeles junto con otras cosas interesantes.
Si todo lo que necesita es poner algo de texto en el portapapeles del sistema, esto lo hará:
fromTkinterimportTk
r =Tk()
r.withdraw()
r.clipboard_clear()
r.clipboard_append('i can has clipboardz?')
r.update()# now it stays on the clipboard after the window is closed
r.destroy()
Y eso es todo, no es necesario perder el tiempo con las bibliotecas de terceros específicas de la plataforma.
Si está utilizando Python 3, reemplácelo TKintercon tkinter.
Obtener contenido del portapapeles: resultado = r.selection_get (selection = "CLIPBOARD")
MJ
34
@SurDin Tkinter pasó a llamarse tkinter en python 3, por lo que depende de la versión que esté utilizando.
Honesto Abe
24
Todas mis aplicaciones no responden después de pegar el contenido del portapapeles con esta función, curiosamente, obtener el resultado funciona bien.
Bartlomiej Lewandowski
14
Funciona si no llamo r.destroy(). Una vez que llamo a eso, el portapapeles se vacía y presionar Ctrl-V puede hacer que la aplicación de destino se congele. (SO: Windows 7 x64)
netvope
8
Para mí esto no funciona para Python 3.4, pero funciona para Python 2.7 (sí, con tkinter en lugar de Tkinter)
Matty
79
No tenía una solución, solo una solución.
Windows Vista en adelante tiene un comando incorporado llamado clipque toma la salida de un comando de la línea de comando y lo coloca en el portapapeles. Por ejemplo, ipconfig | clip.
Entonces hice una función con el osmódulo que toma una cadena y la agrega al portapapeles usando la solución incorporada de Windows.
import os
def addToClipBoard(text):
command ='echo '+ text.strip()+'| clip'
os.system(command)# Example
addToClipBoard('penny lane')# Penny Lane is now in your ears, eyes, and clipboard.
Sin embargo, como se señaló anteriormente en los comentarios, una desventaja de este enfoque es que el echocomando agrega automáticamente una nueva línea al final de su texto. Para evitar esto, puede usar una versión modificada del comando:
@WilliBallenthin, entonces necesitas envolverlo entre comillas dobles. Pero, ¿y si CONTIENE comillas dobles? Entonces necesitas duplicar las comillas dobles. text with " quotes and | pipese convierte "text with "" quotes and | pipe" Aunque esto puede tener problemas en sistemas con ventanas mayores de 95.
ColBeseder
55
Función extremadamente insegura ... El contenido enviado a su portapapeles ahora es un vector de entrada y, por lo tanto, aumenta su superficie de ataque.
Phil L.
2
También necesito soporte para nuevas líneas, así que modifiqué esto para usarlo type. Escribo mi texto en el archivo y uso el comando type myfile.txt | clip.
Mixopteryx
1
Aunque esta es la mejor respuesta para mí, tiene un problema (Python 3.5, Windows 10); siempre se agrega una nueva línea no deseada al final de la cadena. ¿Cómo evitarlo?
mmj
42
También puede usar ctypes para acceder a la API de Windows y evitar el paquete masivo pywin32. Esto es lo que uso (disculpe el mal estilo, pero la idea está ahí):
import ctypes
# Get required functions, strcpy..
strcpy = ctypes.cdll.msvcrt.strcpy
ocb = ctypes.windll.user32.OpenClipboard# Basic clipboard functions
ecb = ctypes.windll.user32.EmptyClipboard
gcd = ctypes.windll.user32.GetClipboardData
scd = ctypes.windll.user32.SetClipboardData
ccb = ctypes.windll.user32.CloseClipboard
ga = ctypes.windll.kernel32.GlobalAlloc# Global memory allocation
gl = ctypes.windll.kernel32.GlobalLock# Global memory Locking
gul = ctypes.windll.kernel32.GlobalUnlock
GMEM_DDESHARE =0x2000defGet():
ocb(None)# Open Clip, Default task
pcontents = gcd(1)# 1 means CF_TEXT.. too lazy to get the token thingy...
data = ctypes.c_char_p(pcontents).value
#gul(pcontents) ?
ccb()return data
defPaste(data):
ocb(None)# Open Clip, Default task
ecb()
hCd = ga(GMEM_DDESHARE, len(bytes(data,"ascii"))+1)
pchData = gl(hCd)
strcpy(ctypes.c_char_p(pchData), bytes(data,"ascii"))
gul(hCd)
scd(1, hCd)
ccb()
Al menos en Python 2.6 x64, tuve que cambiar bytes(data,"ascii")a bytes(data). Gracias por responder la pregunta, no puedo usar pywin32 o tk o una serie de otras cosas y esto funciona.
Pat Corwin
1
No se preocupe, pero tenga en cuenta que los datos devueltos desde el portapapeles en realidad están en otra codificación, creo que es Windows CP-1252. Esto fue pirateado de alguna manera, pero si no usa la codificación correcta, los caracteres que no son ascii generarán un error o se decodificarán incorrectamente.
kapace
Los nombres de las variables no deberían necesitar comentarios, y todo debería ser compatible con Unicode.
Cees Timmerman
bytes(data, "mbcs")funcionará con la codificación predeterminada de Windows. Me permitió cargar esto en el portapapeles "másreas ç saod é í ó u* ü ö ï/"y volver a leerlo correctamente.
mvbentes
1
usar mbcs me da esto: OSError: excepción: infracción de acceso escribiendo 0x0000000000000000
Seaky Lone
35
Puede usar pyperclip - módulo de portapapeles multiplataforma. O Xerox : módulo similar, excepto que requiere que el módulo win32 Python funcione en Windows.
+1. Me gusta esta solución Es incluso más simple que la solución Tkinter aceptada. Si importó pandas de todos modos, no hay gastos adicionales. También funciona en todas las plataformas. Ni siquiera (en la mayoría de los casos) requiere la instalación de un nuevo paquete.
ChaimG
44
esto usa de pypercliptodos modos, así que mejor usopyperpclip
maxbellec
1
Para la mayoría de las personas (es decir, yo), pandasestá disponible pero import pyperclipno funciona. Así que no estoy de acuerdo con "mejor uso de pyperclip".
Doctor Core
1
Si está restringido a usar solo pandas, puede usar pyperclip directamente import pandas.io.clipboard as pyperclipo nombrarlo como desee. Ahí es donde se encuentra pandas, al menos
David Culbreth
1
Esto parece agregar un carácter de nueva línea a la cadena que copias
Gijs van Oort
18
La forma más simple es con pyperclip . Funciona en python 2 y 3.
¿Y el pyperclipmódulo viene con Python? Que versiones No lo veo en Python 2.7 ...
SamB
8
Sí, rechace una respuesta que resuelva fácilmente el problema en menos de 5 líneas; porque pequeños detalles como las referencias son más importantes; Gran uso de stackoverflow mi amigo. Voy a editar de todos modos para los nitpickers. Consejo para usted: respuestas negativas que son inútiles o que no resuelven el problema; votaciones positivas que resuelven el problema o que al menos son útiles y haga una sugerencia en los comentarios para mejorar una respuesta útil en lugar de votar negativamente.
maviz
2
Sin referencia, no resuelves nada. Pero como agregó el enlace, eliminaré el voto negativo, ya que la respuesta es buena ahora. Mi mayor problema era que parecía una importación de biblioteca estándar; parecía un código que podía copiar / pegar cuando no lo era.
Gloweye
pyperclip.paste()no funciona con imágenes solo devuelve NoneTypeerror. pero funciona con clic derecho y copia y luego usando python para pegar los resultados copiados.
JayRizzo
11
He probado varias soluciones, pero esta es la más simple que pasa mi prueba :
#coding=utf-8import win32clipboard # http://sourceforge.net/projects/pywin32/def copy(text):
win32clipboard.OpenClipboard()
win32clipboard.EmptyClipboard()
win32clipboard.SetClipboardText(text, win32clipboard.CF_UNICODETEXT)
win32clipboard.CloseClipboard()def paste():
win32clipboard.OpenClipboard()
data = win32clipboard.GetClipboardData(win32clipboard.CF_UNICODETEXT)
win32clipboard.CloseClipboard()return data
if __name__ =="__main__":
text ="Testing\nthe “clip—board”: 📋"try: text = text.decode('utf8')# Python 2 needs decode to make a Unicode string.exceptAttributeError:passprint("%r"% text.encode('utf8'))
copy(text)
data = paste()print("%r"% data.encode('utf8'))print("OK"if text == data else"FAIL")try:print(data)exceptUnicodeEncodeErroras er:print(er)print(data.encode('utf8'))
Probado OK en Python 3.4 en Windows 8.1 y Python 2.7 en Windows 7. También al leer datos Unicode con avances de línea Unix copiados de Windows. Los datos copiados permanecen en el portapapeles después de que Python sale:"Testing
the “clip—board”: 📋"
Si quieres sin dependencias externas, utilizar este código (ahora parte de multiplataforma pyperclip- C:\Python34\Scripts\pip install --upgrade pyperclip):
def copy(text):
GMEM_DDESHARE =0x2000
CF_UNICODETEXT =13
d = ctypes.windll # cdll expects 4 more bytes in user32.OpenClipboard(None)try:# Python 2ifnot isinstance(text, unicode):
text = text.decode('mbcs')exceptNameError:ifnot isinstance(text, str):
text = text.decode('mbcs')
d.user32.OpenClipboard(0)
d.user32.EmptyClipboard()
hCd = d.kernel32.GlobalAlloc(GMEM_DDESHARE, len(text.encode('utf-16-le'))+2)
pchData = d.kernel32.GlobalLock(hCd)
ctypes.cdll.msvcrt.wcscpy(ctypes.c_wchar_p(pchData), text)
d.kernel32.GlobalUnlock(hCd)
d.user32.SetClipboardData(CF_UNICODETEXT, hCd)
d.user32.CloseClipboard()def paste():
CF_UNICODETEXT =13
d = ctypes.windll
d.user32.OpenClipboard(0)
handle = d.user32.GetClipboardData(CF_UNICODETEXT)
text = ctypes.c_wchar_p(handle).value
d.user32.CloseClipboard()return text
¿De dónde sacas win32clipboard? No es parte de mi Python 2.7. ¿Y por qué pasteusar en CF_TEXTlugar de CF_UNICODETEXT?
Mark Ransom
@MarkRansom pywin32, y porque mi prueba funcionó bien hasta que lo hice más difícil usando 📋. He actualizado el código.
Cees Timmerman
11
Por alguna razón, nunca he podido hacer que la solución Tk funcione para mí. La solución de kapace es mucho más viable, pero el formato es contrario a mi estilo y no funciona con Unicode. Aquí hay una versión modificada.
import ctypes
OpenClipboard= ctypes.windll.user32.OpenClipboardEmptyClipboard= ctypes.windll.user32.EmptyClipboardGetClipboardData= ctypes.windll.user32.GetClipboardDataSetClipboardData= ctypes.windll.user32.SetClipboardDataCloseClipboard= ctypes.windll.user32.CloseClipboard
CF_UNICODETEXT =13GlobalAlloc= ctypes.windll.kernel32.GlobalAllocGlobalLock= ctypes.windll.kernel32.GlobalLockGlobalUnlock= ctypes.windll.kernel32.GlobalUnlockGlobalSize= ctypes.windll.kernel32.GlobalSize
GMEM_MOVEABLE =0x0002
GMEM_ZEROINIT =0x0040
unicode_type = type(u'')def get():
text =NoneOpenClipboard(None)
handle =GetClipboardData(CF_UNICODETEXT)
pcontents =GlobalLock(handle)
size =GlobalSize(handle)if pcontents and size:
raw_data = ctypes.create_string_buffer(size)
ctypes.memmove(raw_data, pcontents, size)
text = raw_data.raw.decode('utf-16le').rstrip(u'\0')GlobalUnlock(handle)CloseClipboard()return text
def put(s):ifnot isinstance(s, unicode_type):
s = s.decode('mbcs')
data = s.encode('utf-16le')OpenClipboard(None)EmptyClipboard()
handle =GlobalAlloc(GMEM_MOVEABLE | GMEM_ZEROINIT, len(data)+2)
pcontents =GlobalLock(handle)
ctypes.memmove(pcontents, data, len(data))GlobalUnlock(handle)SetClipboardData(CF_UNICODETEXT, handle)CloseClipboard()
paste = get
copy = put
Lo anterior ha cambiado desde que se creó esta respuesta por primera vez, para hacer frente mejor a los caracteres Unicode extendidos y Python 3. Se ha probado en Python 2.7 y 3.5, y funciona incluso con emoji como \U0001f601 (😁).
@CeesTimmerman Me encantaría tener un sistema Windows 8.1 para probar por qué. Podría tener la oportunidad de investigar más tarde hoy. ¿Estás seguro de que tenías texto en el portapapeles?
Mark Ransom
Si. He probado ampliamente el código del portapapeles en Python en los últimos tres días.
Cees Timmerman
La put()función también necesita trabajo; el emoji "📋" (\ U0001f400) se copia como "🐀" (\ U0001f4cb) o "📋". se convierte en "📋".
Cees Timmerman
@CeesTimmerman que lo explica. La representación interna de Unicode cambió, no recuerdo si era 3.3 o 3.4. Para solucionarlo, se requerirá una codificación explícita de UTF-16. No es un error.
Mark Ransom
1
@YngvarKristiansen Finalmente pude hacer esos cambios. Ahora confío en que este código funciona para la mayoría de las versiones modernas de Python y para todos los posibles caracteres Unicode.
Mark Ransom
10
Parece que necesita agregar win32clipboard a sus paquetes de sitio. Es parte del paquete pywin32
Esta parece ser la mejor solución. Portapapeles se puede instalar con pip install clipboard.
vy32
5
Esta es la forma más fácil y confiable que encontré si estás bien dependiendo de Pandas. Sin embargo, no creo que esto sea oficialmente parte de la API de Pandas, por lo que puede romperse con futuras actualizaciones. Funciona a partir de 0.25.3
Los widgets también tienen un método con nombre .clipboard_get()que devuelve el contenido del portapapeles (a menos que ocurra algún tipo de error en función del tipo de datos en el portapapeles).
Curiosamente, este método no se mencionó en las fuentes de documentación de TkInter en línea comunes (pero no oficiales) a las que generalmente me refiero.
Es una buena solución, pero imagino que gran parte de la pitón se desarrolla y ejecuta en un IDE
Jesse Reza Khorasanee
2
Además de la respuesta de Mark Ransom utilizando ctypes: esto no funciona para (¿todos?) Sistemas x64 ya que los controladores parecen estar truncados a int-size. La definición explícita de args y valores de retorno ayuda a superar este problema.
Sería útil una explicación del problema y la solución.
showdev
una función para copiar texto en un portapapeles. usando la biblioteca wx python (nunca aprendí TK) otra solución a la pregunta que se hace aquí.
jlk
Siéntase libre de editar la respuesta para incluir su explicación del problema / solución @jlk; esto generalmente hace que las respuestas sean más útiles. Además, gracias por intentarlo, pero supongo que el póster original tenía alguna razón para pedir Tk específicamente.
agua helada
0
El fragmento que comparto aquí aprovecha la capacidad de formatear archivos de texto: ¿qué sucede si desea copiar una salida compleja en el portapapeles? (Diga una matriz numpy en la columna o una lista de algo)
import subprocess
import os
def cp2clip(clist):#create a temporary file
fi=open("thisTextfileShouldNotExist.txt","w")#write in the text file the way you want your data to befor m in clist:
fi.write(m+"\n")#close the file
fi.close()#send "clip < file" to the shell
cmd="clip < thisTextfileShouldNotExist.txt"
w = subprocess.check_call(cmd,shell=True)#delete the temporary text file
os.remove("thisTextfileShouldNotExist.txt")return w
funciona solo para Windows, se puede adaptar para Linux o Mac, supongo. Quizás un poco complicado ...
No todas las respuestas funcionaron para mis diversas configuraciones de Python, por lo que esta solución solo usa el módulo de subproceso. Sin embargo, copy_keywordtiene que ser pbcopypara Mac o clippara Windows:
import subprocess
subprocess.run('copy_keyword', universal_newlines=True, input='New Clipboard Value 😀')
Aquí hay un código más extenso que verifica automáticamente cuál es el sistema operativo actual:
import platform
import subprocess
copy_string ='New Clipboard Value 😀'# Check which operating system is running to get the correct copying keyword.if platform.system()=='Darwin':
copy_keyword ='pbcopy'elif platform.system()=='Windows':
copy_keyword ='clip'
subprocess.run(copy_keyword, universal_newlines=True, input=copy_string)
tal vez pueda ser constructivo e indicar el mensaje de error que recibe y la versión de python que está utilizando. las 2 líneas que escribí funcionan con python 2. gracias
tagoma
2
La pregunta es "¿Cómo copio una cadena al portapapeles en Windows usando Python?". Ciertamente, esto no se bloquea, pero no satisface en absoluto la pregunta de que en realidad no hace nada en absoluto
Antti Haapala
2
P: ¿cómo copio una cadena al portapapeles de Windows usando Python? A: importe una biblioteca GUI y cree el objeto raíz. . Lo sentimos, ¿cómo responde esto a la pregunta planteada?
Martijn Pieters
con python3 puede hacer algo en este sentido: importar tkinter> tki = tkinter.Tk ()> tki.clipboard_clear () # borrar el portapapeles actual> mystring = 'Hello World'> tki.clipboard_append (mystring)> tki.clipboard_get ( ) Fuera [19]: 'Hello World'>
tagoma
2
Entonces haz que esa sea la respuesta. Tal como está, en realidad no tienes nada útil aquí. ¿Has probado eso en Windows?
Respuestas:
En realidad,
pywin32
yctypes
parece ser una exageración para esta simple tarea.Tkinter
es un marco GUI multiplataforma, que se entrega con Python por defecto y tiene métodos de acceso al portapapeles junto con otras cosas interesantes.Si todo lo que necesita es poner algo de texto en el portapapeles del sistema, esto lo hará:
Y eso es todo, no es necesario perder el tiempo con las bibliotecas de terceros específicas de la plataforma.
Si está utilizando Python 3, reemplácelo
TKinter
contkinter
.fuente
r.destroy()
. Una vez que llamo a eso, el portapapeles se vacía y presionar Ctrl-V puede hacer que la aplicación de destino se congele. (SO: Windows 7 x64)No tenía una solución, solo una solución.
Windows Vista en adelante tiene un comando incorporado llamado
clip
que toma la salida de un comando de la línea de comando y lo coloca en el portapapeles. Por ejemplo,ipconfig | clip
.Entonces hice una función con el
os
módulo que toma una cadena y la agrega al portapapeles usando la solución incorporada de Windows.Sin embargo, como se señaló anteriormente en los comentarios, una desventaja de este enfoque es que el
echo
comando agrega automáticamente una nueva línea al final de su texto. Para evitar esto, puede usar una versión modificada del comando:Si está utilizando Windows XP, funcionará siguiendo los pasos de Copiar y pegar desde el símbolo del sistema de Windows XP Pro directamente al Portapapeles .
fuente
text
contiene| calc.exe
?text with " quotes and | pipe
se convierte"text with "" quotes and | pipe"
Aunque esto puede tener problemas en sistemas con ventanas mayores de 95.type
. Escribo mi texto en el archivo y uso el comandotype myfile.txt | clip
.También puede usar ctypes para acceder a la API de Windows y evitar el paquete masivo pywin32. Esto es lo que uso (disculpe el mal estilo, pero la idea está ahí):
fuente
bytes(data,"ascii")
abytes(data)
. Gracias por responder la pregunta, no puedo usar pywin32 o tk o una serie de otras cosas y esto funciona.bytes(data, "mbcs")
funcionará con la codificación predeterminada de Windows. Me permitió cargar esto en el portapapeles"másreas ç saod é í ó u* ü ö ï/"
y volver a leerlo correctamente.Puede usar pyperclip - módulo de portapapeles multiplataforma. O Xerox : módulo similar, excepto que requiere que el módulo win32 Python funcione en Windows.
fuente
pyperclip
no hace Unicode en Windows.win32clipboard
hace.pyperclip
parche fue aceptado;c:\python34\Scripts\pip install --upgrade pyperclip
para manejar texto Unicode.pyperclip
asípaperclip
. Además, como en 2016, pyperclip también funciona con caracteres Unicode. He probado los caracteres ± ° © ® αβγθΔΨΦåäö para trabajar en Win10 de 64 bits, con Python 3.5 y pyperclip 1.5.27.Puede usar los excelentes pandas, que tienen un soporte de portapapeles incorporado, pero necesita pasar por un DataFrame.
fuente
pyperclip
todos modos, así que mejor usopyperpclip
pandas
está disponible peroimport pyperclip
no funciona. Así que no estoy de acuerdo con "mejor uso de pyperclip".import pandas.io.clipboard as pyperclip
o nombrarlo como desee. Ahí es donde se encuentrapandas
, al menosLa forma más simple es con pyperclip . Funciona en python 2 y 3.
Para instalar esta biblioteca, use:
Ejemplo de uso:
Si desea obtener el contenido del portapapeles:
fuente
pyperclip
módulo viene con Python? Que versiones No lo veo en Python 2.7 ...pyperclip.paste()
no funciona con imágenes solo devuelveNoneType
error. pero funciona con clic derecho y copia y luego usando python para pegar los resultados copiados.He probado varias soluciones, pero esta es la más simple que pasa mi prueba :
Probado OK en Python 3.4 en Windows 8.1 y Python 2.7 en Windows 7. También al leer datos Unicode con avances de línea Unix copiados de Windows. Los datos copiados permanecen en el portapapeles después de que Python sale:
"Testing the “clip—board”: 📋"
Si quieres sin dependencias externas, utilizar este código (ahora parte de multiplataforma
pyperclip
-C:\Python34\Scripts\pip install --upgrade pyperclip
):fuente
win32clipboard
? No es parte de mi Python 2.7. ¿Y por quépaste
usar enCF_TEXT
lugar deCF_UNICODETEXT
?Por alguna razón, nunca he podido hacer que la solución Tk funcione para mí. La solución de kapace es mucho más viable, pero el formato es contrario a mi estilo y no funciona con Unicode. Aquí hay una versión modificada.
Lo anterior ha cambiado desde que se creó esta respuesta por primera vez, para hacer frente mejor a los caracteres Unicode extendidos y Python 3. Se ha probado en Python 2.7 y 3.5, y funciona incluso con emoji como
\U0001f601 (😁)
.fuente
put()
función también necesita trabajo; el emoji "📋" (\ U0001f400) se copia como "🐀" (\ U0001f4cb) o "📋". se convierte en "📋".Parece que necesita agregar win32clipboard a sus paquetes de sitio. Es parte del paquete pywin32
fuente
Puedes usar el módulo
clipboard
. Es simple y extremadamente fácil de usar. Funciona con Mac , Windows y Linux .Nota: es una alternativa de
pyperclip
Después de instalar, impórtelo:
Entonces puedes copiar así:
También puede pegar el texto copiado:
fuente
pip install clipboard
.Esta es la forma más fácil y confiable que encontré si estás bien dependiendo de Pandas. Sin embargo, no creo que esto sea oficialmente parte de la API de Pandas, por lo que puede romperse con futuras actualizaciones. Funciona a partir de 0.25.3
fuente
Los widgets también tienen un método con nombre
.clipboard_get()
que devuelve el contenido del portapapeles (a menos que ocurra algún tipo de error en función del tipo de datos en el portapapeles).El
clipboard_get()
método se menciona en este informe de error:http://bugs.python.org/issue14777
Curiosamente, este método no se mencionó en las fuentes de documentación de TkInter en línea comunes (pero no oficiales) a las que generalmente me refiero.
fuente
Creo que hay una solución mucho más simple para esto.
Luego ejecute su programa en la línea de comando
Esto canalizará la salida de su archivo al portapapeles
fuente
Además de la respuesta de Mark Ransom utilizando ctypes: esto no funciona para (¿todos?) Sistemas x64 ya que los controladores parecen estar truncados a int-size. La definición explícita de args y valores de retorno ayuda a superar este problema.
fuente
fuente
El fragmento que comparto aquí aprovecha la capacidad de formatear archivos de texto: ¿qué sucede si desea copiar una salida compleja en el portapapeles? (Diga una matriz numpy en la columna o una lista de algo)
funciona solo para Windows, se puede adaptar para Linux o Mac, supongo. Quizás un poco complicado ...
ejemplo:
Ctrl + V en cualquier editor de texto:
fuente
Esta es la respuesta mejorada del atomizador .
Nota 2 llamadas de
update()
y200 ms
retraso entre ellos. Protegen las aplicaciones de congelación debido a un estado inestable del portapapeles:fuente
¡Usa la biblioteca del portapapeles de Python!
Portapapeles contiene 'abc' ahora. ¡Feliz pegado!
fuente
No todas las respuestas funcionaron para mis diversas configuraciones de Python, por lo que esta solución solo usa el módulo de subproceso. Sin embargo,
copy_keyword
tiene que serpbcopy
para Mac oclip
para Windows:Aquí hay un código más extenso que verifica automáticamente cuál es el sistema operativo actual:
fuente
¡Puedes usar el módulo winclip32! Instalar en pc:
copiar:
Llegar:
Para más información: https://pypi.org/project/winclip32/
fuente
Fragmento de código para copiar el portapapeles:
Cree un código de Python envoltorio en un módulo llamado ( clipboard.py ):
Luego importe el módulo anterior a su código.
Debo dar crédito a la entrada del blog Clipboard Access en IronPython .
fuente
puedes probar esto:
fuente
fuente