¿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?

ensayador
fuente
44
Relacionado con esta pregunta .
glglgl
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á:

from Tkinter import Tk
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.

atomizador
fuente
55
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:

def addToClipBoard(text):
    command = 'echo | set /p nul=' + text.strip() + '| clip'
    os.system(command)

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 .

usuario1227883
fuente
20
¿Qué pasa si textcontiene | calc.exe ?
Willi Ballenthin
2
@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 = 0x2000

def Get():
  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

def Paste(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()
kapace
fuente
55
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.

pongo
fuente
pyperclipno hace Unicode en Windows. win32clipboardhace.
Cees Timmerman
13
Mi pyperclipparche fue aceptado; c:\python34\Scripts\pip install --upgrade pyperclippara manejar texto Unicode.
Cees Timmerman
1
Me tomó un tiempo descubrir que esto no es pyperclipasí 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.
np8
28

Puede usar los excelentes pandas, que tienen un soporte de portapapeles incorporado, pero necesita pasar por un DataFrame.

import pandas as pd
df=pd.DataFrame(['Text to copy'])
df.to_clipboard(index=False,header=False)
Gadi Oron
fuente
3
+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.

Para instalar esta biblioteca, use:

pip install pyperclip

Ejemplo de uso:

import pyperclip

pyperclip.copy("your string")

Si desea obtener el contenido del portapapeles:

clipboard_content = pyperclip.paste()
maviz
fuente
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-8

import 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.
    except AttributeError: pass
    print("%r" % text.encode('utf8'))
    copy(text)
    data = paste()
    print("%r" % data.encode('utf8'))
    print("OK" if text == data else "FAIL")

    try: print(data)
    except UnicodeEncodeError as 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 2
        if not isinstance(text, unicode):
            text = text.decode('mbcs')
    except NameError:
        if not 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
Cees Timmerman
fuente
¿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.OpenClipboard
EmptyClipboard = ctypes.windll.user32.EmptyClipboard
GetClipboardData = ctypes.windll.user32.GetClipboardData
SetClipboardData = ctypes.windll.user32.SetClipboardData
CloseClipboard = ctypes.windll.user32.CloseClipboard
CF_UNICODETEXT = 13

GlobalAlloc = ctypes.windll.kernel32.GlobalAlloc
GlobalLock = ctypes.windll.kernel32.GlobalLock
GlobalUnlock = ctypes.windll.kernel32.GlobalUnlock
GlobalSize = ctypes.windll.kernel32.GlobalSize
GMEM_MOVEABLE = 0x0002
GMEM_ZEROINIT = 0x0040

unicode_type = type(u'')

def get():
    text = None
    OpenClipboard(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):
    if not 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 (😁).

Mark Ransom
fuente
@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

Jason Coon
fuente
1
sería una respuesta mucho mejor con algún código de ejemplo.
Jean-François Fabre
5

Puedes usar el módulo clipboard. Es simple y extremadamente fácil de usar. Funciona con Mac , Windows y Linux .
Nota: es una alternativa depyperclip

Después de instalar, impórtelo:

import clipboard

Entonces puedes copiar así:

clipboard.copy("This is copied")

También puede pegar el texto copiado:

clipboard.paste()
Trueno Negro
fuente
2
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

from pandas.io.clipboard import copy 
copy("test")
Esostack
fuente
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).

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.

mpb
fuente
3

Creo que hay una solución mucho más simple para esto.

name = input('What is your name? ')
print('Hello %s' % (name) )

Luego ejecute su programa en la línea de comando

python greeter.py | acortar

Esto canalizará la salida de su archivo al portapapeles

jdeyrup
fuente
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.

import ctypes
import ctypes.wintypes as w

CF_UNICODETEXT = 13

u32 = ctypes.WinDLL('user32')
k32 = ctypes.WinDLL('kernel32')

OpenClipboard = u32.OpenClipboard
OpenClipboard.argtypes = w.HWND,
OpenClipboard.restype = w.BOOL

GetClipboardData = u32.GetClipboardData
GetClipboardData.argtypes = w.UINT,
GetClipboardData.restype = w.HANDLE

EmptyClipboard = u32.EmptyClipboard
EmptyClipboard.restype = w.BOOL

SetClipboardData = u32.SetClipboardData
SetClipboardData.argtypes = w.UINT, w.HANDLE,
SetClipboardData.restype = w.HANDLE

CloseClipboard = u32.CloseClipboard
CloseClipboard.argtypes = None
CloseClipboard.restype = w.BOOL

GHND = 0x0042

GlobalAlloc = k32.GlobalAlloc
GlobalAlloc.argtypes = w.UINT, w.ctypes.c_size_t,
GlobalAlloc.restype = w.HGLOBAL

GlobalLock = k32.GlobalLock
GlobalLock.argtypes = w.HGLOBAL,
GlobalLock.restype = w.LPVOID

GlobalUnlock = k32.GlobalUnlock
GlobalUnlock.argtypes = w.HGLOBAL,
GlobalUnlock.restype = w.BOOL

GlobalSize = k32.GlobalSize
GlobalSize.argtypes = w.HGLOBAL,
GlobalSize.restype = w.ctypes.c_size_t

unicode_type = type(u'')

def get():
    text = None
    OpenClipboard(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):
    if not isinstance(s, unicode_type):
        s = s.decode('mbcs')
    data = s.encode('utf-16le')
    OpenClipboard(None)
    EmptyClipboard()
    handle = GlobalAlloc(GHND, len(data) + 2)
    pcontents = GlobalLock(handle)
    ctypes.memmove(pcontents, data, len(data))
    GlobalUnlock(handle)
    SetClipboardData(CF_UNICODETEXT, handle)
    CloseClipboard()

#Test run
paste = get
copy = put
copy("Hello World!")
print(paste())
M.Bauer
fuente
0
import wx

def ctc(text):

    if not wx.TheClipboard.IsOpened():
        wx.TheClipboard.Open()
        data = wx.TextDataObject()
        data.SetText(text)
        wx.TheClipboard.SetData(data)
    wx.TheClipboard.Close()

ctc(text)
jlk
fuente
2
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 be
    for 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 ...

ejemplo:

>>>cp2clip(["ET","phone","home"])
>>>0

Ctrl + V en cualquier editor de texto:

ET
phone
home
thomasJeanne
fuente
0

Esta es la respuesta mejorada del atomizador .

Nota 2 llamadas de update()y 200 msretraso entre ellos. Protegen las aplicaciones de congelación debido a un estado inestable del portapapeles:

from Tkinter import Tk
import time     

r = Tk()
r.withdraw()
r.clipboard_clear()
r.clipboard_append('some string')

r.update()
time.sleep(.2)
r.update()

r.destroy()
MarianD
fuente
0

¡Usa la biblioteca del portapapeles de Python!

import clipboard as cp
cp.copy("abc")

Portapapeles contiene 'abc' ahora. ¡Feliz pegado!

entusiasta_coder
fuente
0

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)
Fetchinator7
fuente
IDLE se bloquea cuando intenta pegar esa cadena.
Max hace cosas
@MaxDoesStuff Pruébalo sin el emoji. No sé por qué eso no funciona en el IDLE predeterminado, pero funciona en otros IDLE.
Fetchinator7
0

¡Puedes usar el módulo winclip32! Instalar en pc:

pip install winclip32

copiar:

import winclip32
winclip32.set_clipboard_data(winclip32.UNICODE_STD_TEXT, "some text")

Llegar:

import winclip32
print(winclip32.get_clipboard_data(winclip32.UNICODE_STD_TEXT))

Para más información: https://pypi.org/project/winclip32/

pypcdev
fuente
-1

Fragmento de código para copiar el portapapeles:

Cree un código de Python envoltorio en un módulo llamado ( clipboard.py ):

import clr
clr.AddReference('System.Windows.Forms')
from System.Windows.Forms import Clipboard
def setText(text):
    Clipboard.SetText(text)

def getText():
    return Clipboard.GetText()

Luego importe el módulo anterior a su código.

import io
import clipboard
code = clipboard.getText()
print code
code = "abcd"
clipboard.setText(code)

Debo dar crédito a la entrada del blog Clipboard Access en IronPython .

Nagesh
fuente
-2

puedes probar esto:

command = 'echo content |clip'
subprocess.check_call(command, shell=True)
Y.Max
fuente
-9
from Tkinter import Tk
clip = Tk()
tagoma
fuente
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?
Martijn Pieters