Comment copier une chaîne dans le presse-papiers sous Windows à l'aide de Python?
193
J'essaie de créer une application Windows de base qui crée une chaîne à partir de l'entrée utilisateur, puis l'ajoute au presse-papiers. Comment copier une chaîne dans le presse-papiers en utilisant Python?
jaraco.clipboard le fait (aussi): clipboard.copy (variable)
JinSnow
Voir également ma réponse à une question connexe sur la copie dans le presse-papiers à l'aide de Tkinter sans afficher de fenêtre. Il comprend une fonction Python qui remplace / renvoie le texte du presse-papiers en utilisant Tkinter.
Edward
Réponses:
286
En fait, pywin32et ctypessemblent exagérés pour cette tâche simple. Tkinterest un framework d'interface graphique multiplateforme, livré avec Python par défaut et doté de méthodes d'accès au presse-papiers ainsi que d'autres choses intéressantes.
Si tout ce dont vous avez besoin est de mettre du texte dans le presse-papiers du système, cela le fera:
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()
Et c'est tout, pas besoin de jouer avec les bibliothèques tierces spécifiques à la plate-forme.
Si vous utilisez Python 3, remplacez-le TKinterpar tkinter.
Obtenir le contenu du presse-papiers: result = r.selection_get (selection = "CLIPBOARD")
MJ
34
@SurDin Tkinter a été renommé tkinter en python 3, donc cela dépend de la version que vous utilisez.
Honest Abe
24
toutes mes applications ne répondent plus après avoir collé le contenu du presse-papiers avec cette fonction, étrangement, obtenir le résultat fonctionne bien.
Bartlomiej Lewandowski
14
Cela fonctionne si je n'appelle pas r.destroy(). Une fois que j'appelle cela, le presse-papiers devient vide et appuyer sur Ctrl-V peut provoquer le gel de l'application cible. (OS: Windows 7 x64)
netvope
8
Pour moi, cela ne fonctionne pas pour python 3.4, mais cela fonctionne pour python 2.7 (oui, avec tkinter au lieu de Tkinter)
Matty
79
Je n'avais pas de solution, juste une solution de contournement.
Windows Vista a une commande intégrée appelée clipqui prend la sortie d'une commande à partir de la ligne de commande et la place dans le presse-papiers. Par exemple,ipconfig | clip ,.
J'ai donc créé une fonction avec le osmodule qui prend une chaîne et l'ajoute au presse-papiers en utilisant la solution Windows intégrée.
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.
Cependant, comme indiqué précédemment dans les commentaires, un inconvénient de cette approche est que la echocommande ajoute automatiquement une nouvelle ligne à la fin de votre texte. Pour éviter cela, vous pouvez utiliser une version modifiée de la commande:
@WilliBallenthin alors vous devez l'envelopper entre guillemets doubles. Mais que faire s'il CONTIENT des guillemets doubles? Ensuite, vous devez doubler les guillemets. text with " quotes and | pipedevient "text with "" quotes and | pipe" Bien que cela puisse avoir des problèmes sur les systèmes avec des fenêtres antérieures à 95.
ColBeseder
5
Fonction extrêmement peu sécurisée ... Le contenu envoyé dans votre presse-papiers est désormais un vecteur d'entrée et augmente ainsi votre surface d'attaque.
Phil L.
2
J'ai également besoin de support pour les nouvelles lignes, j'ai donc modifié ceci pour l'utiliser type. J'écris mon texte dans un fichier et j'utilise la commande type myfile.txt | clip.
Mixopteryx
1
Bien que ce soit la meilleure réponse pour moi, cela pose un problème (Python 3.5, Windows 10); une nouvelle ligne indésirable est toujours ajoutée à la fin de la chaîne. Comment l'éviter?
mmj
42
Vous pouvez également utiliser des ctypes pour accéder à l'API Windows et éviter le package pywin32 massif. C'est ce que j'utilise (excusez le style médiocre, mais l'idée est là):
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()
Au moins en python 2.6 x64, j'ai dû passer bytes(data,"ascii")à bytes(data). Merci d'avoir répondu à la question, je ne peux pas utiliser pywin32 ou tk ou un certain nombre d'autres choses et cela fonctionne.
Pat Corwin
1
Pas de soucis, mais notez que les données renvoyées par le presse-papiers sont en fait dans un autre encodage, je crois qu'il s'agit de Windows CP-1252. Cela a été quelque peu piraté ensemble, mais si vous n'utilisez pas le bon encodage, les caractères non ascii soulèveront une erreur ou décoderont de manière incorrecte.
kapace
Les noms de variables ne doivent pas nécessiter de commentaires et tout doit prendre en charge Unicode.
Cees Timmerman
bytes(data, "mbcs")fonctionnera avec l'encodage par défaut de Windows. M'a permis de charger ceci dans le presse-papiers "másreas ç saod é í ó u* ü ö ï/"et de le relire correctement.
mvbentes
1
l'utilisation de mbcs me donne ceci: OSError: exception: violation d'accès écrivant 0x0000000000000000
Seaky Lone
35
Vous pouvez utiliser pyperclip - module de presse-papiers multiplateforme. Ou Xerox - module similaire, sauf nécessite le module win32 Python pour fonctionner sous Windows.
+1. J'aime cette solution. C'est encore plus simple que la solution Tkinter acceptée. Si vous avez importé des pandas de toute façon, il n'y a pas de frais généraux supplémentaires. Cela fonctionne également sur toutes les plates-formes. Cela ne nécessite même pas (dans la plupart des cas) d'installer un nouveau package.
ChaimG
4
cela utilise pyperclipquand même, donc mieux utiliserpyperpclip
maxbellec
1
Pour la plupart des gens (c'est-à-dire moi), pandasest facilement disponible mais import pyperclipne fonctionne pas. Donc je ne suis pas d'accord avec "mieux utiliser pyperclip".
Doctor Core
1
Si vous êtes limité à n'utiliser que des pandas, vous pouvez utiliser pyperclip directement import pandas.io.clipboard as pyperclipou le nommer comme vous le souhaitez. C'est là que ça se trouve pandas, au moins
David Culbreth
1
Cela semble ajouter un caractère de nouvelle ligne à la chaîne que vous copiez
Gijs van Oort
19
Le moyen le plus simple est avec pyperclip . Fonctionne en python 2 et 3.
Pour installer cette bibliothèque, utilisez:
pip install pyperclip
Exemple d'utilisation:
import pyperclip
pyperclip.copy("your string")
Si vous souhaitez obtenir le contenu du presse-papiers:
Et le pyperclipmodule est-il livré avec Python? Quelles versions? Je ne le vois pas dans Python 2.7 ...
SamB
8
Ouais, voter contre une réponse qui résout facilement le problème en moins de 5 lignes; parce que les petits détails comme le référencement sont plus importants; grande utilisation de stackoverflow mon ami. Je vais quand même éditer pour les nitpickers. Astuce pour vous: voter contre les réponses inutiles ou qui ne résolvent pas le problème; votez des réponses qui résolvent le problème ou du moins sont utiles et faites une suggestion dans les commentaires pour améliorer une réponse utile au lieu de voter contre.
maviz le
3
Sans référence, vous ne résolvez rien. Mais puisque vous avez ajouté le lien, je supprimerai le vote défavorable, car la réponse est bonne maintenant. Mon plus gros problème était que cela ressemblait à une importation de bibliothèque standard; cela ressemblait à du code que vous pouviez copier / coller quand ce n'était pas le cas.
Gloweye
pyperclip.paste()ne fonctionne pas avec les images renvoie juste une NoneTypeerreur. mais fonctionne avec un clic droit et copiez puis en utilisant python pour coller les résultats copiés.
JayRizzo
11
J'ai essayé différentes solutions, mais c'est la plus simple qui passe mon test :
#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'))
Testé OK dans Python 3.4 sur Windows 8.1 et Python 2.7 sur Windows 7. Également lors de la lecture de données Unicode avec des sauts de ligne Unix copiés à partir de Windows. Les données copiées restent dans le presse-papiers après la fermeture de Python:"Testing
the “clip—board”: 📋"
Si vous ne voulez pas de dépendances externes, utilisez ce code (qui fait maintenant partie de multiplateforme 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
Où allez-vous win32clipboard? Cela ne fait pas partie de mon Python 2.7. Et pourquoi pasteutiliser CF_TEXTau lieu de CF_UNICODETEXT?
Mark Ransom
@MarkRansom pywin32, et parce que mon test a bien fonctionné jusqu'à ce que je le rende plus difficile en utilisant 📋. J'ai mis à jour le code.
Cees Timmerman
11
Pour une raison quelconque, je n'ai jamais réussi à faire fonctionner la solution Tk. La solution de kapace est beaucoup plus pratique, mais le formatage est contraire à mon style et ne fonctionne pas avec Unicode. Voici une version modifiée.
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
Ce qui précède a changé depuis la création de cette réponse, pour mieux gérer les caractères Unicode étendus et Python 3. Il a été testé en Python 2.7 et 3.5 et fonctionne même avec des emoji tels que \U0001f601 (😁).
@CeesTimmerman J'adorerais avoir un système Windows 8.1 pour tester pourquoi. J'aurai peut-être l'occasion d'enquêter plus tard dans la journée. Êtes-vous sûr d'avoir du texte dans le presse-papiers?
Mark Ransom
Oui. J'ai testé de manière approfondie le code du presse-papiers en Python au cours des trois derniers jours.
Cees Timmerman
La put()fonction a également besoin de travail; l'emoji "📋" (\ U0001f400) est copié en tant que "🐀" (\ U0001f4cb) ou "📋". se transforme en "📋".
Cees Timmerman
@CeesTimmerman qui l'explique. La représentation interne Unicode a changé, je ne me souviens pas si c'était 3.3 ou 3.4. Pour y remédier, il faudra un encodage explicite en UTF-16. Ce n'est pas un bug.
Mark Ransom
1
@YngvarKristiansen J'ai finalement réussi à faire ces changements. Je suis maintenant convaincu que ce code fonctionne pour la plupart des versions modernes de Python et tous les caractères Unicode possibles.
Mark Ransom
10
Il semble que vous deviez ajouter win32clipboard à vos packages de site. Cela fait partie du package pywin32
serait une bien meilleure réponse avec un exemple de code.
Jean-François Fabre
6
Voici le moyen le plus simple et le plus fiable que j'ai trouvé si vous êtes d'accord avec les pandas. Cependant, je ne pense pas que cela fasse officiellement partie de l'API Pandas, donc cela pourrait rompre avec les futures mises à jour. Cela fonctionne à partir de 0.25.3
Vous pouvez utiliser module clipboard. C'est simple et extrêmement facile à utiliser. Fonctionne avec Mac , Windows et Linux . Remarque: c'est une alternative depyperclip
Cela semble être la meilleure solution. le presse-papiers peut être installé avec pip install clipboard.
vy32
3
Les widgets ont également une méthode nommée .clipboard_get() qui renvoie le contenu du presse-papiers (à moins qu'une erreur ne se produise en fonction du type de données dans le presse-papiers).
Étrangement, cette méthode n'a pas été mentionnée dans les sources de documentation en ligne courantes (mais non officielles) de TkInter auxquelles je me réfère habituellement.
C'est une bonne solution mais j'imagine qu'une grande partie du python est développé et exécuté dans un IDE
Jesse Reza Khorasanee
2
En plus de la réponse de Mark Ransom utilisant des ctypes: cela ne fonctionne pas pour (tous?) Les systèmes x64 car les poignées semblent être tronquées à la taille int. La définition explicite des arguments et des valeurs de retour permet de surmonter ce problème.
Une explication du problème et de la solution serait utile.
showdev
une fonction pour copier du texte dans un presse-papiers. en utilisant la bibliothèque wx python (je n'ai jamais appris TK) une autre solution à la question posée ici.
jlk
N'hésitez pas à modifier la réponse pour inclure votre explication du problème / solution @jlk - cela rend généralement les réponses plus utiles. Merci également d'avoir essayé, mais je suppose que l'affiche originale avait une raison de demander spécifiquement Tk.
icedwater
0
L'extrait que je partage ici tire parti de la possibilité de formater des fichiers texte: que faire si vous souhaitez copier une sortie complexe dans le presse-papiers? (Dites un tableau numpy dans la colonne ou une liste de quelque chose)
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
fonctionne uniquement pour Windows, peut être adapté pour Linux ou Mac, je suppose. Peut-être un peu compliqué ...
Toutes les réponses n'ont pas fonctionné pour mes différentes configurations python, donc cette solution utilise uniquement le module de sous-processus. Cependant, copy_keyworddoit être pbcopypour Mac ou clippour Windows:
import subprocess
subprocess.run('copy_keyword', universal_newlines=True, input='New Clipboard Value 😀')
Voici un code plus complet qui vérifie automatiquement quel est le système d'exploitation actuel:
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)
IDLE plante lorsque vous essayez de coller cette chaîne.
Max fait des trucs le
@MaxDoesStuff Essayez-le sans les emoji. Je ne sais pas pourquoi cela ne fonctionne pas dans l'IDLE par défaut, mais cela fonctionne dans d'autres IDLE.
Fetchinator7
0
Vous pouvez utiliser le module winclip32! installer:
peut-être que vous pouvez être constructif et dire le message d'erreur que vous obtenez et la version de python que vous utilisez. les 2 lignes que j'ai écrites fonctionnent avec python 2. merci
tagoma
2
La question est "comment copier une chaîne dans le presse-papiers sous Windows en utilisant Python". Certes, cela ne plante pas mais cela ne satisfait pas tout à fait la question en ce sens que cela ne fait rien du tout
Antti Haapala
2
Q: Comment copier une chaîne dans le presse-papiers Windows à l'aide de Python? R: importez une bibliothèque GUI et créez l'objet racine. . Désolé, comment cela répond-il même à la question posée?
Martijn Pieters
avec python3, vous pouvez faire quelque chose de ce genre: import tkinter> tki = tkinter.Tk ()> tki.clipboard_clear () # effacer le presse-papiers actuel> mystring = 'Hello World'> tki.clipboard_append (mystring)> tki.clipboard_get ( ) Out [19]: 'Hello World'>
tagoma
2
Alors faites-en la réponse. Dans l'état actuel des choses, vous n'avez rien d'utile ici. Avez-vous testé cela sur Windows?
Réponses:
En fait,
pywin32
etctypes
semblent exagérés pour cette tâche simple.Tkinter
est un framework d'interface graphique multiplateforme, livré avec Python par défaut et doté de méthodes d'accès au presse-papiers ainsi que d'autres choses intéressantes.Si tout ce dont vous avez besoin est de mettre du texte dans le presse-papiers du système, cela le fera:
Et c'est tout, pas besoin de jouer avec les bibliothèques tierces spécifiques à la plate-forme.
Si vous utilisez Python 3, remplacez-le
TKinter
partkinter
.la source
r.destroy()
. Une fois que j'appelle cela, le presse-papiers devient vide et appuyer sur Ctrl-V peut provoquer le gel de l'application cible. (OS: Windows 7 x64)Je n'avais pas de solution, juste une solution de contournement.
Windows Vista a une commande intégrée appelée
clip
qui prend la sortie d'une commande à partir de la ligne de commande et la place dans le presse-papiers. Par exemple,ipconfig | clip
,.J'ai donc créé une fonction avec le
os
module qui prend une chaîne et l'ajoute au presse-papiers en utilisant la solution Windows intégrée.Cependant, comme indiqué précédemment dans les commentaires, un inconvénient de cette approche est que la
echo
commande ajoute automatiquement une nouvelle ligne à la fin de votre texte. Pour éviter cela, vous pouvez utiliser une version modifiée de la commande:Si vous utilisez Windows XP, il fonctionnera simplement en suivant les étapes de Copier et coller à partir de l'invite de commande de Windows XP Pro directement dans le Presse-papiers .
la source
text
contient| calc.exe
?text with " quotes and | pipe
devient"text with "" quotes and | pipe"
Bien que cela puisse avoir des problèmes sur les systèmes avec des fenêtres antérieures à 95.type
. J'écris mon texte dans un fichier et j'utilise la commandetype myfile.txt | clip
.Vous pouvez également utiliser des ctypes pour accéder à l'API Windows et éviter le package pywin32 massif. C'est ce que j'utilise (excusez le style médiocre, mais l'idée est là):
la source
bytes(data,"ascii")
àbytes(data)
. Merci d'avoir répondu à la question, je ne peux pas utiliser pywin32 ou tk ou un certain nombre d'autres choses et cela fonctionne.bytes(data, "mbcs")
fonctionnera avec l'encodage par défaut de Windows. M'a permis de charger ceci dans le presse-papiers"másreas ç saod é í ó u* ü ö ï/"
et de le relire correctement.Vous pouvez utiliser pyperclip - module de presse-papiers multiplateforme. Ou Xerox - module similaire, sauf nécessite le module win32 Python pour fonctionner sous Windows.
la source
pyperclip
ne fait pas Unicode sous Windows.win32clipboard
Est-ce que.pyperclip
patch a été accepté;c:\python34\Scripts\pip install --upgrade pyperclip
pour gérer le texte Unicode.pyperclip
pas le caspaperclip
. De plus, comme en 2016, pyperclip fonctionne également avec les caractères Unicode. J'ai testé des caractères ± ° © © αβγθΔΨΦåäö pour travailler sur Win10 64 bits, avec Python 3.5 et pyperclip 1.5.27.Vous pouvez utiliser les excellents pandas, qui ont un support de presse-papiers intégré, mais vous devez passer par un DataFrame.
la source
pyperclip
quand même, donc mieux utiliserpyperpclip
pandas
est facilement disponible maisimport pyperclip
ne fonctionne pas. Donc je ne suis pas d'accord avec "mieux utiliser pyperclip".import pandas.io.clipboard as pyperclip
ou le nommer comme vous le souhaitez. C'est là que ça se trouvepandas
, au moinsLe moyen le plus simple est avec pyperclip . Fonctionne en python 2 et 3.
Pour installer cette bibliothèque, utilisez:
Exemple d'utilisation:
Si vous souhaitez obtenir le contenu du presse-papiers:
la source
pyperclip
module est-il livré avec Python? Quelles versions? Je ne le vois pas dans Python 2.7 ...pyperclip.paste()
ne fonctionne pas avec les images renvoie juste uneNoneType
erreur. mais fonctionne avec un clic droit et copiez puis en utilisant python pour coller les résultats copiés.J'ai essayé différentes solutions, mais c'est la plus simple qui passe mon test :
Testé OK dans Python 3.4 sur Windows 8.1 et Python 2.7 sur Windows 7. Également lors de la lecture de données Unicode avec des sauts de ligne Unix copiés à partir de Windows. Les données copiées restent dans le presse-papiers après la fermeture de Python:
"Testing the “clip—board”: 📋"
Si vous ne voulez pas de dépendances externes, utilisez ce code (qui fait maintenant partie de multiplateforme
pyperclip
-C:\Python34\Scripts\pip install --upgrade pyperclip
):la source
win32clipboard
? Cela ne fait pas partie de mon Python 2.7. Et pourquoipaste
utiliserCF_TEXT
au lieu deCF_UNICODETEXT
?Pour une raison quelconque, je n'ai jamais réussi à faire fonctionner la solution Tk. La solution de kapace est beaucoup plus pratique, mais le formatage est contraire à mon style et ne fonctionne pas avec Unicode. Voici une version modifiée.
Ce qui précède a changé depuis la création de cette réponse, pour mieux gérer les caractères Unicode étendus et Python 3. Il a été testé en Python 2.7 et 3.5 et fonctionne même avec des emoji tels que
\U0001f601 (😁)
.la source
put()
fonction a également besoin de travail; l'emoji "📋" (\ U0001f400) est copié en tant que "🐀" (\ U0001f4cb) ou "📋". se transforme en "📋".Il semble que vous deviez ajouter win32clipboard à vos packages de site. Cela fait partie du package pywin32
la source
Voici le moyen le plus simple et le plus fiable que j'ai trouvé si vous êtes d'accord avec les pandas. Cependant, je ne pense pas que cela fasse officiellement partie de l'API Pandas, donc cela pourrait rompre avec les futures mises à jour. Cela fonctionne à partir de 0.25.3
la source
Vous pouvez utiliser module
clipboard
. C'est simple et extrêmement facile à utiliser. Fonctionne avec Mac , Windows et Linux .Remarque: c'est une alternative de
pyperclip
Après l'installation, importez-le:
Ensuite, vous pouvez copier comme ceci:
Vous pouvez également coller le texte copié:
la source
pip install clipboard
.Les widgets ont également une méthode nommée
.clipboard_get()
qui renvoie le contenu du presse-papiers (à moins qu'une erreur ne se produise en fonction du type de données dans le presse-papiers).La
clipboard_get()
méthode est mentionnée dans ce rapport de bogue:http://bugs.python.org/issue14777
Étrangement, cette méthode n'a pas été mentionnée dans les sources de documentation en ligne courantes (mais non officielles) de TkInter auxquelles je me réfère habituellement.
la source
Je pense qu'il existe une solution beaucoup plus simple à cela.
Ensuite, exécutez votre programme dans la ligne de commande
Cela dirigera la sortie de votre fichier vers le presse-papiers
la source
En plus de la réponse de Mark Ransom utilisant des ctypes: cela ne fonctionne pas pour (tous?) Les systèmes x64 car les poignées semblent être tronquées à la taille int. La définition explicite des arguments et des valeurs de retour permet de surmonter ce problème.
la source
la source
L'extrait que je partage ici tire parti de la possibilité de formater des fichiers texte: que faire si vous souhaitez copier une sortie complexe dans le presse-papiers? (Dites un tableau numpy dans la colonne ou une liste de quelque chose)
fonctionne uniquement pour Windows, peut être adapté pour Linux ou Mac, je suppose. Peut-être un peu compliqué ...
exemple:
Ctrl + V dans n'importe quel éditeur de texte:
la source
C'est la réponse améliorée de l' atomiseur .
Notez 2 appels
update()
et200 ms
délai entre eux. Ils protègent les applications de congélation en raison d'un état instable du presse-papiers:la source
Utilisez la bibliothèque de presse-papiers de python!
Le presse-papiers contient maintenant «abc». Bon collage!
la source
Toutes les réponses n'ont pas fonctionné pour mes différentes configurations python, donc cette solution utilise uniquement le module de sous-processus. Cependant,
copy_keyword
doit êtrepbcopy
pour Mac ouclip
pour Windows:Voici un code plus complet qui vérifie automatiquement quel est le système d'exploitation actuel:
la source
Vous pouvez utiliser le module winclip32! installer:
copier:
obtenir:
pour plus d'informations: https://pypi.org/project/winclip32/
la source
Extrait de code pour copier le presse-papiers:
Créez un code Python wrapper dans un module nommé ( clipboard.py ):
Importez ensuite le module ci-dessus dans votre code.
Je dois donner du crédit au billet de blog Clipboard Access en IronPython .
la source
vous pouvez essayer ceci:
la source
la source