Wie kopiere ich mit Python eine Zeichenfolge in die Zwischenablage unter Windows?
193
Ich versuche, eine einfache Windows-Anwendung zu erstellen, die aus Benutzereingaben eine Zeichenfolge erstellt und diese dann zur Zwischenablage hinzufügt. Wie kopiere ich mit Python eine Zeichenfolge in die Zwischenablage?
Siehe auch meine Antwort auf eine verwandte Frage zum Kopieren in die Zwischenablage mit Tkinter, ohne ein Fenster anzuzeigen. Es enthält eine Python-Funktion, die den Text der Zwischenablage mithilfe von Tkinter ersetzt / zurückgibt.
Edward
Antworten:
285
Eigentlich pywin32und ctypesscheinen ein Overkill für diese einfache Aufgabe zu sein. Tkinterist ein plattformübergreifendes GUI-Framework, das standardmäßig mit Python geliefert wird und über Methoden zum Zugriff auf die Zwischenablage sowie andere coole Dinge verfügt.
Wenn Sie lediglich Text in die Zwischenablage des Systems einfügen müssen, geschieht dies wie folgt:
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()
Und das ist alles, Sie müssen nicht mit plattformspezifischen Bibliotheken von Drittanbietern herumspielen.
Wenn Sie Python 3 verwenden, ersetzen Sie TKinterdurch tkinter.
Holen Sie sich den Inhalt der Zwischenablage: result = r.selection_get (selection = "CLIPBOARD")
MJ
34
@SurDin Tkinter wurde in Python 3 in tkinter umbenannt, es hängt also davon ab, welche Version Sie verwenden.
Ehrliche Abe
24
Alle meine Apps reagieren nicht mehr, nachdem der Inhalt der Zwischenablage mit dieser Funktion eingefügt wurde. Seltsamerweise funktioniert das Ergebnis einwandfrei.
Bartlomiej Lewandowski
14
Es funktioniert, wenn ich nicht anrufe r.destroy(). Sobald ich das aufrufe, wird die Zwischenablage leer und das Drücken von Strg-V kann dazu führen, dass die Ziel-App einfriert. (Betriebssystem: Windows 7 x64)
Netvope
8
Für mich funktioniert das nicht für Python 3.4, aber es funktioniert für Python 2.7 (ja, mit tkinter anstelle von Tkinter)
Matty
78
Ich hatte keine Lösung, nur eine Problemumgehung.
Ab Windows Vista gibt es einen integrierten Befehl namens clip, der die Ausgabe eines Befehls über die Befehlszeile in die Zwischenablage legt. Beispielsweise,ipconfig | clip .
Also habe ich mit dem osModul eine Funktion erstellt, die eine Zeichenfolge verwendet und sie mithilfe der integrierten Windows-Lösung zur Zwischenablage hinzufügt.
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.
Wie bereits in den Kommentaren erwähnt, besteht ein Nachteil dieses Ansatzes darin, dass der echoBefehl am Ende Ihres Textes automatisch eine neue Zeile hinzufügt. Um dies zu vermeiden, können Sie eine geänderte Version des Befehls verwenden:
@ WilliBallenthin dann müssen Sie es in doppelte Anführungszeichen setzen. Aber was ist, wenn es doppelte Anführungszeichen enthält? Dann müssen Sie die doppelten Anführungszeichen verdoppeln. text with " quotes and | pipewird "text with "" quotes and | pipe" zwar mit Windows - Probleme auf Systemen haben älter als 95. Dies kann
ColBeseder
5
Extrem unsichere Funktion ... Inhalte, die an Ihre Zwischenablage gesendet werden, sind jetzt ein Eingabevektor und erhöhen somit Ihre Angriffsfläche.
Phil L.
2
Ich brauche auch Unterstützung für Zeilenumbrüche, daher habe ich diese geändert, um sie zu verwenden type. Ich schreibe meinen Text in eine Datei und benutze den Befehl type myfile.txt | clip.
Mixopteryx
1
Obwohl dies die beste Antwort für mich ist, gibt es ein Problem (Python 3.5, Windows 10). Am Ende der Zeichenfolge wird immer eine unerwünschte neue Zeile hinzugefügt. Wie vermeide ich das?
mmj
42
Sie können auch ctypes verwenden, um auf die Windows-API zuzugreifen und das massive pywin32-Paket zu vermeiden. Dies ist, was ich benutze (entschuldigen Sie den schlechten Stil, aber die Idee ist da):
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()
Mindestens in Python 2.6 x64, musste ich ändern bytes(data,"ascii")zu bytes(data). Vielen Dank für die Beantwortung der Frage, ich kann pywin32 oder tk oder eine Reihe anderer Dinge nicht verwenden und das funktioniert.
Pat Corwin
1
Keine Sorge, aber beachten Sie, dass die aus der Zwischenablage zurückgegebenen Daten tatsächlich in einer anderen Codierung vorliegen. Ich glaube, es handelt sich um Windows CP-1252. Dies wurde etwas zusammen gehackt, aber wenn Sie nicht die richtige Codierung verwenden, werden Nicht-ASCII-Zeichen einen Fehler auslösen oder falsch dekodieren.
Kapoor
Variablennamen sollten keine Kommentare benötigen und alles sollte Unicode unterstützen.
Cees Timmerman
bytes(data, "mbcs")funktioniert mit Windows Standardcodierung. Erlaubte mir, dies in die Zwischenablage zu laden "másreas ç saod é í ó u* ü ö ï/"und es richtig zurückzulesen.
MVBENTES
1
Die Verwendung von mbcs gibt mir Folgendes: OSError: Ausnahme: Zugriffsverletzung beim Schreiben von 0x0000000000000000
Seaky Lone
35
Sie können pyperclip - plattformübergreifendes Zwischenablage-Modul verwenden. Oder Xerox - ähnliches Modul, außer dass das win32 Python-Modul unter Windows funktioniert.
Sie können die hervorragenden Pandas verwenden, die über eine integrierte Zwischenablage-Unterstützung verfügen, müssen jedoch einen DataFrame durchlaufen.
import pandas as pd
df=pd.DataFrame(['Text to copy'])
df.to_clipboard(index=False,header=False)
+1. Ich mag diese Lösung. Es ist noch einfacher als die akzeptierte Tkinter-Lösung. Wenn Sie Pandas trotzdem importiert haben, entsteht kein zusätzlicher Aufwand. Es funktioniert auch auf allen Plattformen. In den meisten Fällen muss nicht einmal ein neues Paket installiert werden.
ChaimG
4
Dies verwendet pyperclipsowieso, also besser nutzenpyperpclip
Maxbellec
1
Für die meisten Menschen (dh mich) pandasist leicht verfügbar, import pyperclipfunktioniert aber nicht. Ich bin also nicht mit "Pyperclip besser nutzen" einverstanden.
Doctor Core
1
Wenn Sie nur Pandas verwenden möchten, können Sie Pyperclip direkt verwenden import pandas.io.clipboard as pyperclipoder benennen, wie Sie möchten. Dort sitzt es pandaszumindest
David Culbreth
1
Dies scheint der Zeichenfolge, die Sie kopieren, ein Zeilenumbruchzeichen hinzuzufügen
Gijs van Oort
18
Der einfachste Weg ist mit Pyperclip . Funktioniert in Python 2 und 3.
Verwenden Sie zum Installieren dieser Bibliothek:
pip install pyperclip
Anwendungsbeispiel:
import pyperclip
pyperclip.copy("your string")
Wenn Sie den Inhalt der Zwischenablage erhalten möchten:
Und kommt das pyperclipModul mit Python? Welche Versionen? Ich sehe es nicht in Python 2.7 ...
SamB
8
Ja, stimmen Sie eine Antwort ab, die das Problem leicht in weniger als 5 Zeilen löst. weil kleine Details wie das Referenzieren wichtiger sind; tolle Verwendung von Stackoverflow mein Freund. Ich werde sowieso für die Nitpicker bearbeiten. Tipp für Sie: Stimmen Sie Antworten ab, die nutzlos sind oder das Problem nicht lösen. Upvote-Antworten, die das Problem lösen oder zumindest nützlich sind, und machen in den Kommentaren einen Vorschlag, um eine nützliche Antwort zu verbessern, anstatt Downvoting.
Maviz
2
Ohne Referenz lösen Sie nichts. Aber da Sie den Link hinzugefügt haben, werde ich die Abwertung entfernen, da die Antwort jetzt gut ist. Mein größeres Problem war, dass es wie ein Standardbibliotheksimport aussah; Es sah aus wie Code, den man kopieren / einfügen konnte, wenn es nicht war.
Gloweye
pyperclip.paste()funktioniert nicht mit Bildern, gibt nur NoneTypeFehler zurück. funktioniert aber mit Rechtsklick und Kopieren und dann mit Python, um die kopierten Ergebnisse einzufügen.
JayRizzo
11
Ich habe verschiedene Lösungen ausprobiert, aber dies ist die einfachste, die meinen Test besteht :
#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'))
OK getestet in Python 3.4 unter Windows 8.1 und Python 2.7 unter Windows 7. Auch beim Lesen von Unicode-Daten mit von Windows kopierten Unix-Zeilenvorschüben. Kopierte Daten bleiben nach dem Beenden von Python in der Zwischenablage:"Testing
the “clip—board”: 📋"
Wenn Sie keine externen Abhängigkeiten wünschen, verwenden Sie diesen Code (jetzt Teil von plattformübergreifend 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
Woher bekommst du win32clipboard? Es ist nicht Teil meines Python 2.7. Und warum tut pasteNutzung CF_TEXTstatt CF_UNICODETEXT?
Mark Ransom
@ MarkRansom pywin32, und weil mein Test gut funktioniert hat, bis ich es mit 📋 schwieriger gemacht habe. Ich habe den Code aktualisiert.
Cees Timmerman
11
Aus irgendeinem Grund konnte ich die Tk-Lösung nie für mich arbeiten lassen. Die Lösung von kapace ist viel praktikabler, aber die Formatierung widerspricht meinem Stil und funktioniert nicht mit Unicode. Hier ist eine modifizierte Version.
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
Das Obige hat sich seit der ersten Erstellung dieser Antwort geändert, um mit erweiterten Unicode-Zeichen und Python 3 besser umgehen zu können. Es wurde sowohl in Python 2.7 als auch in 3.5 getestet und funktioniert sogar mit Emoji wie \U0001f601 (😁).
@CeesTimmerman Ich hätte gerne ein Windows 8.1-System, um zu testen, warum. Ich könnte heute später die Gelegenheit haben, Nachforschungen anzustellen. Sind Sie sicher, dass Sie Text in der Zwischenablage hatten?
Mark Ransom
Ja. Ich habe in den letzten drei Tagen den Code der Zwischenablage in Python ausgiebig getestet.
Cees Timmerman
Die put()Funktion braucht auch Arbeit; emoji "📋" (\ U0001f400) wird als "🐀" (\ U0001f4cb) oder "📋" kopiert. dreht sich zu "📋".
Cees Timmerman
@CeesTimmerman das erklärt es. Die interne Unicode-Darstellung hat sich geändert. Ich kann mich nicht erinnern, ob es 3.3 oder 3.4 war. Um dies zu beheben, ist eine explizite Codierung in UTF-16 erforderlich. Es ist kein Fehler.
Mark Ransom
1
@YngvarKristiansen Ich bin endlich dazu gekommen, diese Änderungen vorzunehmen. Ich bin jetzt zuversichtlich, dass dieser Code für die meisten modernen Versionen von Python und alle möglichen Unicode-Zeichen funktioniert.
Mark Ransom
10
Sieht so aus, als müssten Sie win32clipboard zu Ihren Site-Paketen hinzufügen. Es ist Teil des pywin32-Pakets
wäre eine viel bessere Antwort mit einem Beispielcode.
Jean-François Fabre
5
Sie können Modul verwenden clipboard. Es ist einfach und extrem einfach zu bedienen. Funktioniert mit Mac , Windows und Linux . Hinweis: Es ist eine Alternative vonpyperclip
Dies scheint die beste Lösung zu sein. Zwischenablage kann mit installiert werden pip install clipboard.
vy32
5
Hier ist der einfachste und zuverlässigste Weg, den ich gefunden habe, wenn es Ihnen je nach Pandas gut geht. Ich denke jedoch nicht, dass dies offiziell Teil der Pandas-API ist, so dass es mit zukünftigen Updates brechen kann. Es funktioniert ab 0.25.3
Widgets haben auch eine Methode namens .clipboard_get() , die den Inhalt der Zwischenablage zurückgibt (es sei denn, aufgrund des Datentyps in der Zwischenablage tritt ein Fehler auf).
Seltsamerweise wurde diese Methode in den allgemeinen (aber inoffiziellen) Online-TkInter-Dokumentationsquellen, auf die ich mich normalerweise beziehe, nicht erwähnt.
Es ist eine gute Lösung, aber ich stelle mir vor, dass ein Großteil der Python in einer IDE entwickelt und ausgeführt wird
Jesse Reza Khorasanee
2
Zusätzlich zu Mark Ransoms Antwort mit ctypes: Dies funktioniert nicht für (alle?) X64-Systeme, da die Handles auf int-size gekürzt zu sein scheinen. Das explizite Definieren von Argumenten und Rückgabewerten hilft, dieses Problem zu überwinden.
Eine Erklärung des Problems und der Lösung wäre hilfreich.
Showdev
Eine Funktion zum Kopieren von Text in eine Zwischenablage. Mit der wx Python-Bibliothek (ich habe TK nie gelernt) eine andere Lösung für die hier gestellte Frage.
jlk
Sie können die Antwort jederzeit bearbeiten, um Ihre Erklärung des Problems / der Lösung @jlk aufzunehmen. Dadurch werden Antworten im Allgemeinen nützlicher. Vielen Dank auch für den Versuch, aber ich nehme an, das Originalplakat hatte einen Grund, speziell nach Tk zu fragen.
Eiswasser
0
Das hier freigegebene Snippet nutzt die Möglichkeit, Textdateien zu formatieren: Was ist, wenn Sie eine komplexe Ausgabe in die Zwischenablage kopieren möchten? (Sagen Sie ein numpy Array in Spalte oder eine Liste von etwas)
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
funktioniert nur für Windows, kann für Linux oder Mac angepasst werden, denke ich. Vielleicht etwas kompliziert ...
Dies ist die verbesserte Antwort des Zerstäubers .
Beachten Sie 2 Anrufe von update()und 200 msVerzögerung zwischen ihnen. Sie schützen Einfrieranwendungen aufgrund eines instabilen Zustands der Zwischenablage:
fromTkinterimportTkimport time
r =Tk()
r.withdraw()
r.clipboard_clear()
r.clipboard_append('some string')
r.update()
time.sleep(.2)
r.update()
r.destroy()
Nicht alle Antworten funktionierten für meine verschiedenen Python-Konfigurationen, daher verwendet diese Lösung nur das Unterprozessmodul. Muss copy_keywordjedoch pbcopyfür Mac oder clipWindows sein:
import subprocess
subprocess.run('copy_keyword', universal_newlines=True, input='New Clipboard Value 😀')
Hier ist ein ausführlicherer Code, der automatisch überprüft, welches Betriebssystem aktuell ist:
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)
Vielleicht können Sie konstruktiv sein und die Fehlermeldung, die Sie erhalten, und die Version von Python, die Sie verwenden, mitteilen. Die 2 Zeilen, die ich geschrieben habe, funktionieren mit Python 2. Danke
Tagoma
2
Die Frage lautet: "Wie kopiere ich eine Zeichenfolge unter Python mit Python in die Zwischenablage?" Sicherlich stürzt dies nicht ab , aber es befriedigt die Frage nicht ganz, da es tatsächlich überhaupt nichts
Antti Haapala
2
F: Wie kopiere ich eine Zeichenfolge mit Python in die Windows-Zwischenablage? A: Importieren Sie eine GUI-Bibliothek und erstellen Sie das Stammobjekt. . Entschuldigung, wie beantwortet dies überhaupt die gestellte Frage?
Martijn Pieters
Mit Python3 können Sie Folgendes tun: import tkinter> tki = tkinter.Tk ()> tki.clipboard_clear () # Löschen Sie die aktuelle Zwischenablage> mystring = 'Hello World'> tki.clipboard_append (mystring)> tki.clipboard_get ( ) Out [19]: 'Hallo Welt'>
Tagoma
2
Dann machen Sie das zur Antwort. So wie es aussieht, haben Sie hier eigentlich nichts Hilfreiches. Haben Sie das unter Windows getestet?
Antworten:
Eigentlich
pywin32
undctypes
scheinen ein Overkill für diese einfache Aufgabe zu sein.Tkinter
ist ein plattformübergreifendes GUI-Framework, das standardmäßig mit Python geliefert wird und über Methoden zum Zugriff auf die Zwischenablage sowie andere coole Dinge verfügt.Wenn Sie lediglich Text in die Zwischenablage des Systems einfügen müssen, geschieht dies wie folgt:
Und das ist alles, Sie müssen nicht mit plattformspezifischen Bibliotheken von Drittanbietern herumspielen.
Wenn Sie Python 3 verwenden, ersetzen Sie
TKinter
durchtkinter
.quelle
r.destroy()
. Sobald ich das aufrufe, wird die Zwischenablage leer und das Drücken von Strg-V kann dazu führen, dass die Ziel-App einfriert. (Betriebssystem: Windows 7 x64)Ich hatte keine Lösung, nur eine Problemumgehung.
Ab Windows Vista gibt es einen integrierten Befehl namens
clip
, der die Ausgabe eines Befehls über die Befehlszeile in die Zwischenablage legt. Beispielsweise,ipconfig | clip
.Also habe ich mit dem
os
Modul eine Funktion erstellt, die eine Zeichenfolge verwendet und sie mithilfe der integrierten Windows-Lösung zur Zwischenablage hinzufügt.Wie bereits in den Kommentaren erwähnt, besteht ein Nachteil dieses Ansatzes darin, dass der
echo
Befehl am Ende Ihres Textes automatisch eine neue Zeile hinzufügt. Um dies zu vermeiden, können Sie eine geänderte Version des Befehls verwenden:Wenn Sie Windows XP verwenden, können Sie die Schritte unter Kopieren und Einfügen von der Eingabeaufforderung von Windows XP Pro direkt in die Zwischenablage ausführen .
quelle
text
enthält| calc.exe
?text with " quotes and | pipe
wird"text with "" quotes and | pipe"
zwar mit Windows - Probleme auf Systemen haben älter als 95. Dies kanntype
. Ich schreibe meinen Text in eine Datei und benutze den Befehltype myfile.txt | clip
.Sie können auch ctypes verwenden, um auf die Windows-API zuzugreifen und das massive pywin32-Paket zu vermeiden. Dies ist, was ich benutze (entschuldigen Sie den schlechten Stil, aber die Idee ist da):
quelle
bytes(data,"ascii")
zubytes(data)
. Vielen Dank für die Beantwortung der Frage, ich kann pywin32 oder tk oder eine Reihe anderer Dinge nicht verwenden und das funktioniert.bytes(data, "mbcs")
funktioniert mit Windows Standardcodierung. Erlaubte mir, dies in die Zwischenablage zu laden"másreas ç saod é í ó u* ü ö ï/"
und es richtig zurückzulesen.Sie können pyperclip - plattformübergreifendes Zwischenablage-Modul verwenden. Oder Xerox - ähnliches Modul, außer dass das win32 Python-Modul unter Windows funktioniert.
quelle
pyperclip
macht Unicode unter Windows nicht.win32clipboard
tut.pyperclip
Patch wurde angenommen;c:\python34\Scripts\pip install --upgrade pyperclip
um Unicode-Text zu verarbeiten.pyperclip
nicht der Fall istpaperclip
. Wie 2016 funktioniert auch Pyperclip mit Unicode-Zeichen. Ich habe Zeichen ± ° © appliance αβγθΔΨΦåäö getestet, um mit Win10 64-Bit mit Python 3.5 und Pyperclip 1.5.27 zu arbeiten.Sie können die hervorragenden Pandas verwenden, die über eine integrierte Zwischenablage-Unterstützung verfügen, müssen jedoch einen DataFrame durchlaufen.
quelle
pyperclip
sowieso, also besser nutzenpyperpclip
pandas
ist leicht verfügbar,import pyperclip
funktioniert aber nicht. Ich bin also nicht mit "Pyperclip besser nutzen" einverstanden.import pandas.io.clipboard as pyperclip
oder benennen, wie Sie möchten. Dort sitzt espandas
zumindestDer einfachste Weg ist mit Pyperclip . Funktioniert in Python 2 und 3.
Verwenden Sie zum Installieren dieser Bibliothek:
Anwendungsbeispiel:
Wenn Sie den Inhalt der Zwischenablage erhalten möchten:
quelle
pyperclip
Modul mit Python? Welche Versionen? Ich sehe es nicht in Python 2.7 ...pyperclip.paste()
funktioniert nicht mit Bildern, gibt nurNoneType
Fehler zurück. funktioniert aber mit Rechtsklick und Kopieren und dann mit Python, um die kopierten Ergebnisse einzufügen.Ich habe verschiedene Lösungen ausprobiert, aber dies ist die einfachste, die meinen Test besteht :
OK getestet in Python 3.4 unter Windows 8.1 und Python 2.7 unter Windows 7. Auch beim Lesen von Unicode-Daten mit von Windows kopierten Unix-Zeilenvorschüben. Kopierte Daten bleiben nach dem Beenden von Python in der Zwischenablage:
"Testing the “clip—board”: 📋"
Wenn Sie keine externen Abhängigkeiten wünschen, verwenden Sie diesen Code (jetzt Teil von plattformübergreifend
pyperclip
-C:\Python34\Scripts\pip install --upgrade pyperclip
):quelle
win32clipboard
? Es ist nicht Teil meines Python 2.7. Und warum tutpaste
NutzungCF_TEXT
stattCF_UNICODETEXT
?Aus irgendeinem Grund konnte ich die Tk-Lösung nie für mich arbeiten lassen. Die Lösung von kapace ist viel praktikabler, aber die Formatierung widerspricht meinem Stil und funktioniert nicht mit Unicode. Hier ist eine modifizierte Version.
Das Obige hat sich seit der ersten Erstellung dieser Antwort geändert, um mit erweiterten Unicode-Zeichen und Python 3 besser umgehen zu können. Es wurde sowohl in Python 2.7 als auch in 3.5 getestet und funktioniert sogar mit Emoji wie
\U0001f601 (😁)
.quelle
put()
Funktion braucht auch Arbeit; emoji "📋" (\ U0001f400) wird als "🐀" (\ U0001f4cb) oder "📋" kopiert. dreht sich zu "📋".Sieht so aus, als müssten Sie win32clipboard zu Ihren Site-Paketen hinzufügen. Es ist Teil des pywin32-Pakets
quelle
Sie können Modul verwenden
clipboard
. Es ist einfach und extrem einfach zu bedienen. Funktioniert mit Mac , Windows und Linux .Hinweis: Es ist eine Alternative von
pyperclip
Importieren Sie es nach der Installation:
Dann können Sie wie folgt kopieren:
Sie können den kopierten Text auch einfügen:
quelle
pip install clipboard
.Hier ist der einfachste und zuverlässigste Weg, den ich gefunden habe, wenn es Ihnen je nach Pandas gut geht. Ich denke jedoch nicht, dass dies offiziell Teil der Pandas-API ist, so dass es mit zukünftigen Updates brechen kann. Es funktioniert ab 0.25.3
quelle
Widgets haben auch eine Methode namens
.clipboard_get()
, die den Inhalt der Zwischenablage zurückgibt (es sei denn, aufgrund des Datentyps in der Zwischenablage tritt ein Fehler auf).Die
clipboard_get()
Methode wird in diesem Fehlerbericht erwähnt:http://bugs.python.org/issue14777
Seltsamerweise wurde diese Methode in den allgemeinen (aber inoffiziellen) Online-TkInter-Dokumentationsquellen, auf die ich mich normalerweise beziehe, nicht erwähnt.
quelle
Ich denke, es gibt eine viel einfachere Lösung dafür.
Führen Sie dann Ihr Programm in der Befehlszeile aus
Dadurch wird die Ausgabe Ihrer Datei in die Zwischenablage geleitet
quelle
Zusätzlich zu Mark Ransoms Antwort mit ctypes: Dies funktioniert nicht für (alle?) X64-Systeme, da die Handles auf int-size gekürzt zu sein scheinen. Das explizite Definieren von Argumenten und Rückgabewerten hilft, dieses Problem zu überwinden.
quelle
quelle
Das hier freigegebene Snippet nutzt die Möglichkeit, Textdateien zu formatieren: Was ist, wenn Sie eine komplexe Ausgabe in die Zwischenablage kopieren möchten? (Sagen Sie ein numpy Array in Spalte oder eine Liste von etwas)
funktioniert nur für Windows, kann für Linux oder Mac angepasst werden, denke ich. Vielleicht etwas kompliziert ...
Beispiel:
Strg + V in einem beliebigen Texteditor:
quelle
Dies ist die verbesserte Antwort des Zerstäubers .
Beachten Sie 2 Anrufe von
update()
und200 ms
Verzögerung zwischen ihnen. Sie schützen Einfrieranwendungen aufgrund eines instabilen Zustands der Zwischenablage:quelle
Verwenden Sie die Python-Zwischenablagebibliothek!
Die Zwischenablage enthält jetzt 'abc'. Viel Spaß beim Einfügen!
quelle
Nicht alle Antworten funktionierten für meine verschiedenen Python-Konfigurationen, daher verwendet diese Lösung nur das Unterprozessmodul. Muss
copy_keyword
jedochpbcopy
für Mac oderclip
Windows sein:Hier ist ein ausführlicherer Code, der automatisch überprüft, welches Betriebssystem aktuell ist:
quelle
Sie können das winclip32-Modul verwenden! Installieren:
Kopieren:
bekommen:
Für weitere Informationen: https://pypi.org/project/winclip32/
quelle
Code-Snippet zum Kopieren der Zwischenablage:
Erstellen Sie einen Wrapper-Python-Code in einem Modul mit dem Namen ( clipboard.py ):
Importieren Sie dann das obige Modul in Ihren Code.
Ich muss dem Blog-Beitrag Zwischenablage-Zugriff in IronPython Ehre machen .
quelle
Sie können dies versuchen:
quelle
quelle