Como copio uma string para a área de transferência no Windows usando Python?
193
Estou tentando criar um aplicativo básico do Windows que crie uma cadeia de caracteres da entrada do usuário e a adicione à área de transferência. Como copiar uma string para a área de transferência usando Python?
jaraco.clipboard faz isso (também): clipboard.copy (variável)
JinSnow
Consulte também minha resposta a uma pergunta relacionada sobre como copiar para a área de transferência usando o Tkinter sem mostrar uma janela. Inclui uma função Python que substitui / retorna o texto da área de transferência usando o Tkinter.
Edward
Respostas:
285
Na verdade, pywin32e ctypesparece ser um exagero para esta tarefa simples. Tkinteré uma estrutura de GUI de plataforma cruzada, que é fornecida com o Python por padrão e possui métodos de acesso à área de transferência junto com outras coisas interessantes.
Se tudo o que você precisa é colocar algum texto na área de transferência do sistema, isso será feito:
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()
E isso é tudo, não há necessidade de mexer com bibliotecas de terceiros específicas da plataforma.
Se você estiver usando o Python 3, substitua TKinterpor tkinter.
Obter conteúdo da área de transferência: result = r.selection_get (selection = "CLIPBOARD")
MJ
34
O @SurDin Tkinter foi renomeado para tkinter no python 3, portanto depende da versão que você está usando.
Honest Abe
24
todos os meus aplicativos ficam sem resposta depois de colar o conteúdo da área de transferência com essa função; estranhamente, obter o resultado funciona bem.
Bartlomiej Lewandowski 02/02
14
Funciona se eu não ligar r.destroy(). Depois que chamo isso, a área de transferência fica vazia e pressionar Ctrl-V pode fazer com que o aplicativo de destino congele. (OS: Windows 7 x64)
netvope
8
Para mim, isso não funciona para python 3.4, mas funciona para Python 2.7 (sim, com tkinter vez de Tkinter)
Matty
78
Eu não tinha uma solução, apenas uma solução alternativa.
O Windows Vista em diante tem um comando embutido chamado clipque pega a saída de um comando da linha de comando e o coloca na área de transferência. Por exemplo ipconfig | clip,.
Então, criei uma função com o osmódulo que pega uma string e a adiciona à área de transferência usando a solução embutida do Windows.
import osdef addToClipBoard(text):
command ='echo '+ text.strip()+'| clip'
os.system(command)# Example
addToClipBoard('penny lane')# Penny Lane is now in your ears, eyes, and clipboard.
Como observado anteriormente nos comentários, no entanto, uma desvantagem dessa abordagem é que o echocomando adiciona automaticamente uma nova linha ao final do seu texto. Para evitar isso, você pode usar uma versão modificada do comando:
@WilliBallenthin, então você precisa colocá-lo entre aspas duplas. Mas e se ele contiver aspas duplas? Então você precisa dobrar as aspas duplas. text with " quotes and | pipetorna-se "text with "" quotes and | pipe" Embora este pode ter problemas em sistemas com janelas com idade superior a 95.
ColBeseder
5
Função extremamente insegura ... O conteúdo enviado para a área de transferência agora é um vetor de entrada e, portanto, aumenta sua superfície de ataque.
Phil L.
2
Também preciso de suporte para novas linhas, então modifiquei isso para usar type. Eu escrevo meu texto para o arquivo, e use o comando type myfile.txt | clip.
precisa saber é o seguinte
1
Embora essa seja a melhor resposta para mim, há um problema (Python 3.5, Windows 10); uma nova linha indesejada é sempre adicionada no final da string. Como evitá-lo?
mmj
42
Você também pode usar ctypes para acessar a API do Windows e evitar o enorme pacote pywin32. É isso que eu uso (desculpe o estilo ruim, mas a ideia está aí):
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()
Pelo menos no python 2.6 x64, tive que mudar bytes(data,"ascii")para bytes(data). Obrigado por responder à pergunta, não posso usar pywin32 ou tk ou várias outras coisas e isso funciona.
22813 Pat Patwin
1
Não se preocupe, mas observe que os dados retornados da área de transferência estão em outra codificação, acredito que seja o Windows CP-1252. Isso foi um pouco hackeado, mas se você não usar a codificação correta, os caracteres não-ascii gerarão um erro ou decodificarão incorretamente.
kapace
Os nomes de variáveis não precisam de comentários e tudo deve suportar Unicode.
Cees Timmerman
bytes(data, "mbcs")funcionará com a codificação padrão do Windows. Permitiu-me carregar isso na área de transferência "másreas ç saod é í ó u* ü ö ï/"e lê-lo novamente corretamente.
Mvbentes 12/05
1
usar mbcs me fornece o seguinte: OSError: exceção: gravação de violação de acesso 0x0000000000000000
Seaky Lone
35
Você pode usar o pyperclip - módulo de transferência de plataforma cruzada. Ou Xerox - módulo semelhante, exceto que o módulo win32 Python funciona no Windows.
+1. Eu gosto desta solução. É ainda mais simples que a solução Tkinter aceita. Se você importou pandas de qualquer maneira, não haverá sobrecarga adicional. Também funciona em todas as plataformas. Nem (na maioria dos casos) requer a instalação de um novo pacote.
ChaimG
4
Isto usa pyperclipde qualquer maneira, então é melhor usopyperpclip
maxbellec
1
Para a maioria das pessoas (eu), pandasestá prontamente disponível, mas import pyperclipnão funciona. Portanto, não concordo com "melhor uso do pyperclip".
Doutor Núcleo
1
Se você estiver restrito a usar apenas pandas, poderá usar o pyperclip diretamente import pandas.io.clipboard as pyperclipou nomeá-lo como quiser. É aí que ele fica dentro pandas, pelo menos
David Culbreth
1
Isso parece adicionar um caractere de nova linha à string que você copia
Gijs van Oort
18
A maneira mais simples é com o pyperclip . Funciona em python 2 e 3.
Para instalar esta biblioteca, use:
pip install pyperclip
Exemplo de uso:
import pyperclip
pyperclip.copy("your string")
Se você deseja obter o conteúdo da área de transferência:
E o pyperclipmódulo vem com Python? Quais versões? Eu não vê-lo em Python 2.7 ...
Samb
8
Sim, voto negativo de uma resposta que resolve facilmente o problema em menos de 5 linhas; porque pequenos detalhes como referência são mais importantes; ótimo uso de stackoverflow meu amigo. Vou editar de qualquer maneira para os nitpickers. Dica para você: voto negativo com respostas inúteis ou que não resolvem o problema; respostas upvote que resolvem o problema ou pelo menos são úteis e fazem uma sugestão nos comentários para melhorar uma resposta útil em vez de reduzir a votação.
maviz
2
Sem referência, você não resolve nada. Mas desde que você adicionou o link, removerei o voto negativo, já que a resposta é boa agora. Meu maior problema era que parecia uma importação de biblioteca padrão; parecia código que você poderia copiar / colar quando não estava.
Gloweye 26/09
pyperclip.paste()não funciona com imagens apenas retorna NoneTypeerro. mas funciona com o botão direito e a cópia e, em seguida, usando python para colar os resultados copiados.
JayRizzo
11
Eu tentei várias soluções, mas esta é a mais simples que passa no meu teste :
#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'))
Testado OK no Python 3.4 no Windows 8.1 e Python 2.7 no Windows 7. Também ao ler dados Unicode com feeds de linha Unix copiados do Windows. Os dados copiados permanecem na área de transferência após a saída do Python:"Testing
the “clip—board”: 📋"
Se você não deseja dependências externas, use este código (agora parte da plataforma cruzada 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 onde você tira isso win32clipboard? Não faz parte do meu Python 2.7. E por que pasteusar em CF_TEXTvez de CF_UNICODETEXT?
Mark Ransom
@ MarkRansom pywin32, e porque meu teste funcionou bem até eu tornar mais difícil o uso de 📋. Eu atualizei o código.
Cees Timmerman
11
Por alguma razão, nunca consegui fazer com que a solução Tk funcionasse para mim. A solução do kapace é muito mais viável, mas a formatação é contrária ao meu estilo e não funciona com o Unicode. Aqui está uma versão 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
O acima foi alterado desde que essa resposta foi criada, para melhor lidar com caracteres Unicode estendidos e Python 3. Foi testado no Python 2.7 e 3.5 e funciona mesmo com emoji como \U0001f601 (😁).
@CeesTimmerman Gostaria de ter um sistema Windows 8.1 para testar o porquê. Talvez eu tenha uma chance de investigar hoje mais tarde. Tem certeza de que havia texto na área de transferência?
Mark Ransom
Sim. Eu testei extensivamente o código da área de transferência em Python nos últimos três dias.
precisa
A put()função também precisa de trabalho; o emoji "📋" (\ U0001f400) é copiado como "🐀" (\ U0001f4cb) ou "📋". passa para "📋".
Cees Timmerman
@CeesTimmerman que explica isso. A representação Unicode interna mudou, não me lembro se era 3.3 ou 3.4. Para corrigi-lo, será necessária uma codificação explícita para UTF-16. Não é um bug.
Mark Ransom
1
@YngvarKristiansen Finalmente cheguei a fazer essas mudanças. Estou confiante agora que esse código funciona para as versões mais modernas do Python e para todos os caracteres Unicode possíveis.
Mark Ransom
10
Parece que você precisa adicionar o win32clipboard aos seus pacotes de sites. Faz parte do pacote pywin32
Esta parece ser a melhor solução. a área de transferência pode ser instalada com pip install clipboard.
vy32 27/03
5
Aqui está a maneira mais fácil e confiável que encontrei se você estiver bem, dependendo dos pandas. No entanto, não acho que isso faça parte oficialmente da API do Pandas, por isso pode ser interrompido com futuras atualizações. Funciona a partir de 0.25.3
Os widgets também têm um método nomeado .clipboard_get()que retorna o conteúdo da área de transferência (a menos que ocorra algum tipo de erro com base no tipo de dados na área de transferência).
É uma boa solução, mas imagino que grande parte do python seja desenvolvida e executada em um IDE
Jesse Reza Khorasanee
2
Além da resposta de Mark Ransom usando ctypes: Isso não funciona para sistemas x64 (todos?), Pois os identificadores parecem estar truncados no tamanho int. A definição explícita de argumentos e valores de retorno ajuda a superar esse problema.
Uma explicação do problema e da solução seria útil.
Showdev 14/04
uma função para copiar texto para uma área de transferência. usando a biblioteca python wx (nunca aprendi TK) outra solução para a pergunta feita aqui.
jlk
Sinta-se à vontade para editar a resposta e incluir sua explicação do problema / solução @jlk - isso geralmente torna as respostas mais úteis. Além disso, obrigado por tentar, mas suponho que o pôster original tivesse algum motivo para solicitar Tk especificamente.
icedwater
0
O trecho que eu compartilho aqui aproveita a capacidade de formatar arquivos de texto: e se você quiser copiar uma saída complexa para a área de transferência? (Diga uma matriz numpy na coluna ou uma 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 apenas para windows, pode ser adaptado para linux ou mac, eu acho. Talvez um pouco complicado ...
Nem todas as respostas funcionaram para minhas várias configurações de python; portanto, esta solução usa apenas o módulo de subprocesso. No entanto, copy_keyworddeve ser pbcopypara Mac ou clipWindows:
import subprocess
subprocess.run('copy_keyword', universal_newlines=True, input='New Clipboard Value 😀')
Aqui está um código mais extenso que verifica automaticamente qual é o sistema operacional atual:
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)
talvez você seja construtivo e conte a mensagem de erro que recebe e a versão do python que está usando. as 2 linhas i escreveu obras com python 2. obrigado
tagoma
2
A questão é "como copio uma string para a área de transferência no Windows usando Python". Certamente isso não falhar , mas não chega a satisfazer na questão em que ele realmente faz nada
Antti Haapala
2
P: como copio uma string para a área de transferência do Windows usando Python? R: importe uma biblioteca da GUI e crie o objeto raiz. . Desculpe, como isso responde à pergunta indicada?
Martijn Pieters
com python3, você pode fazer algo assim: import tkinter> tki = tkinter.Tk ()> tki.clipboard_clear () # limpe a área de transferência atual> mystring = 'Hello World'> tki.clipboard_append (mystring)> tki.clipboard_get ( ) Out [19]: 'Hello World'>
tagoma 21/02
2
Então faça disso a resposta. Tal como está, você realmente não tem nada útil aqui. Você já testou isso no Windows?
Respostas:
Na verdade,
pywin32
ectypes
parece ser um exagero para esta tarefa simples.Tkinter
é uma estrutura de GUI de plataforma cruzada, que é fornecida com o Python por padrão e possui métodos de acesso à área de transferência junto com outras coisas interessantes.Se tudo o que você precisa é colocar algum texto na área de transferência do sistema, isso será feito:
E isso é tudo, não há necessidade de mexer com bibliotecas de terceiros específicas da plataforma.
Se você estiver usando o Python 3, substitua
TKinter
portkinter
.fonte
r.destroy()
. Depois que chamo isso, a área de transferência fica vazia e pressionar Ctrl-V pode fazer com que o aplicativo de destino congele. (OS: Windows 7 x64)Eu não tinha uma solução, apenas uma solução alternativa.
O Windows Vista em diante tem um comando embutido chamado
clip
que pega a saída de um comando da linha de comando e o coloca na área de transferência. Por exemploipconfig | clip
,.Então, criei uma função com o
os
módulo que pega uma string e a adiciona à área de transferência usando a solução embutida do Windows.Como observado anteriormente nos comentários, no entanto, uma desvantagem dessa abordagem é que o
echo
comando adiciona automaticamente uma nova linha ao final do seu texto. Para evitar isso, você pode usar uma versão modificada do comando:Se você estiver usando o Windows XP, ele funcionará apenas seguindo as etapas em Copiar e colar do prompt de comando do Windows XP Pro direto para a Área de transferência .
fonte
text
contiver| calc.exe
?text with " quotes and | pipe
torna-se"text with "" quotes and | pipe"
Embora este pode ter problemas em sistemas com janelas com idade superior a 95.type
. Eu escrevo meu texto para o arquivo, e use o comandotype myfile.txt | clip
.Você também pode usar ctypes para acessar a API do Windows e evitar o enorme pacote pywin32. É isso que eu uso (desculpe o estilo ruim, mas a ideia está aí):
fonte
bytes(data,"ascii")
parabytes(data)
. Obrigado por responder à pergunta, não posso usar pywin32 ou tk ou várias outras coisas e isso funciona.bytes(data, "mbcs")
funcionará com a codificação padrão do Windows. Permitiu-me carregar isso na área de transferência"másreas ç saod é í ó u* ü ö ï/"
e lê-lo novamente corretamente.Você pode usar o pyperclip - módulo de transferência de plataforma cruzada. Ou Xerox - módulo semelhante, exceto que o módulo win32 Python funciona no Windows.
fonte
pyperclip
não executa Unicode no Windows.win32clipboard
faz.pyperclip
adesivo foi aceito;c:\python34\Scripts\pip install --upgrade pyperclip
para lidar com texto Unicode.pyperclip
não é issopaperclip
. Além disso, como em 2016, o pyperclip também funciona com caracteres Unicode. Testei caracteres ± ° © Rue αβγθΔΨΦåäö para trabalhar no Win10 de 64 bits, com Python 3.5 e pyperclip 1.5.27.Você pode usar os excelentes pandas, que possuem suporte à área de transferência, mas precisam passar por um DataFrame.
fonte
pyperclip
de qualquer maneira, então é melhor usopyperpclip
pandas
está prontamente disponível, masimport pyperclip
não funciona. Portanto, não concordo com "melhor uso do pyperclip".import pandas.io.clipboard as pyperclip
ou nomeá-lo como quiser. É aí que ele fica dentropandas
, pelo menosA maneira mais simples é com o pyperclip . Funciona em python 2 e 3.
Para instalar esta biblioteca, use:
Exemplo de uso:
Se você deseja obter o conteúdo da área de transferência:
fonte
pyperclip
módulo vem com Python? Quais versões? Eu não vê-lo em Python 2.7 ...pyperclip.paste()
não funciona com imagens apenas retornaNoneType
erro. mas funciona com o botão direito e a cópia e, em seguida, usando python para colar os resultados copiados.Eu tentei várias soluções, mas esta é a mais simples que passa no meu teste :
Testado OK no Python 3.4 no Windows 8.1 e Python 2.7 no Windows 7. Também ao ler dados Unicode com feeds de linha Unix copiados do Windows. Os dados copiados permanecem na área de transferência após a saída do Python:
"Testing the “clip—board”: 📋"
Se você não deseja dependências externas, use este código (agora parte da plataforma cruzada
pyperclip
-C:\Python34\Scripts\pip install --upgrade pyperclip
):fonte
win32clipboard
? Não faz parte do meu Python 2.7. E por quepaste
usar emCF_TEXT
vez deCF_UNICODETEXT
?Por alguma razão, nunca consegui fazer com que a solução Tk funcionasse para mim. A solução do kapace é muito mais viável, mas a formatação é contrária ao meu estilo e não funciona com o Unicode. Aqui está uma versão modificada.
O acima foi alterado desde que essa resposta foi criada, para melhor lidar com caracteres Unicode estendidos e Python 3. Foi testado no Python 2.7 e 3.5 e funciona mesmo com emoji como
\U0001f601 (😁)
.fonte
put()
função também precisa de trabalho; o emoji "📋" (\ U0001f400) é copiado como "🐀" (\ U0001f4cb) ou "📋". passa para "📋".Parece que você precisa adicionar o win32clipboard aos seus pacotes de sites. Faz parte do pacote pywin32
fonte
Você pode usar o módulo
clipboard
. É simples e extremamente fácil de usar. Funciona com Mac , Windows e Linux .Nota: É uma alternativa de
pyperclip
Após a instalação, importe-o:
Então você pode copiar assim:
Você também pode colar o texto copiado:
fonte
pip install clipboard
.Aqui está a maneira mais fácil e confiável que encontrei se você estiver bem, dependendo dos pandas. No entanto, não acho que isso faça parte oficialmente da API do Pandas, por isso pode ser interrompido com futuras atualizações. Funciona a partir de 0.25.3
fonte
Os widgets também têm um método nomeado
.clipboard_get()
que retorna o conteúdo da área de transferência (a menos que ocorra algum tipo de erro com base no tipo de dados na área de transferência).O
clipboard_get()
método é mencionado neste relatório de bug:http://bugs.python.org/issue14777
Estranhamente, esse método não foi mencionado nas fontes comuns (mas não oficiais) de documentação on-line do TkInter às quais costumo me referir.
fonte
Eu acho que existe uma solução muito mais simples para isso.
Em seguida, execute seu programa na linha de comando
Isso direcionará a saída do seu arquivo para a área de transferência
fonte
Além da resposta de Mark Ransom usando ctypes: Isso não funciona para sistemas x64 (todos?), Pois os identificadores parecem estar truncados no tamanho int. A definição explícita de argumentos e valores de retorno ajuda a superar esse problema.
fonte
fonte
O trecho que eu compartilho aqui aproveita a capacidade de formatar arquivos de texto: e se você quiser copiar uma saída complexa para a área de transferência? (Diga uma matriz numpy na coluna ou uma lista de algo)
funciona apenas para windows, pode ser adaptado para linux ou mac, eu acho. Talvez um pouco complicado ...
exemplo:
Ctrl + V em qualquer editor de texto:
fonte
Esta é a resposta melhorada do atomizador .
Nota 2 chamadas
update()
e200 ms
atraso entre elas. Eles protegem os aplicativos de congelamento devido a um estado instável da área de transferência:fonte
Use a biblioteca de transferência da python!
A área de transferência contém 'abc' agora. Colagem feliz!
fonte
Nem todas as respostas funcionaram para minhas várias configurações de python; portanto, esta solução usa apenas o módulo de subprocesso. No entanto,
copy_keyword
deve serpbcopy
para Mac ouclip
Windows:Aqui está um código mais extenso que verifica automaticamente qual é o sistema operacional atual:
fonte
Você pode usar o módulo winclip32! instalar:
copiar:
para obter:
para mais informações: https://pypi.org/project/winclip32/
fonte
Fragmento de código para copiar a área de transferência:
Crie um código Python de wrapper em um módulo chamado ( clipboard.py ):
Em seguida, importe o módulo acima para o seu código.
Devo dar crédito à postagem do blog Clipboard Access no IronPython .
fonte
você pode tentar isso:
fonte
fonte