Hier ist ein Beispiel, in dem zuerst die Daten der Zwischenablage festgelegt und dann abgerufen werden:
import win32clipboard
# set clipboard data
win32clipboard.OpenClipboard()
win32clipboard.EmptyClipboard()
win32clipboard.SetClipboardText('testing 123')
win32clipboard.CloseClipboard()# get clipboard data
win32clipboard.OpenClipboard()
data = win32clipboard.GetClipboardData()
win32clipboard.CloseClipboard()print data
Eine wichtige Erinnerung aus der Dokumentation:
Wenn das Fenster die Zwischenablage überprüft oder geändert hat, schließen Sie die Zwischenablage, indem Sie CloseClipboard aufrufen. Dadurch können andere Fenster auf die Zwischenablage zugreifen. Platzieren Sie nach dem Aufruf von CloseClipboard kein Objekt in der Zwischenablage.
Wissen Sie, ob es eine Möglichkeit gibt, die with-Anweisung zu verwenden?
Norfeldt
3
Bemerkenswert ist, dass SetClipboardText in py34, win7 ohne einen vorherigen Aufruf von EmptyClipboard
CoderTao am
Dieses Modul ist nützlich, wenn Sie komplexere Vorgänge ausführen möchten, z. B. den HTML-formatierten Inhalt aus der Zwischenablage entfernen möchten. Siehe stackoverflow.com/questions/17298897/…
xji
1
@Norfeldt Wenn es keinen nativen Weg gibt, können Sie einfach Ihr eigenes benutzerdefiniertes Objekt erstellen, das "mit" unterstützt
Elijas
38
Sie können dies einfach über das integrierte Modul Tkinter erledigen, das im Grunde eine GUI-Bibliothek ist. Dieser Code erstellt ein leeres Widget, um den Inhalt der Zwischenablage vom Betriebssystem abzurufen.
Ein Code, der den Wert der Zwischenablage über Tkinter erhält: Importieren von Tkinter Tk [\ nl] r = Tk () [\ nl] result = r.selection_get (selection = "CLIPBOARD") [\ nl] r.destroy ()
mgkrebbs
18
Wenn Sie keine zusätzlichen Pakete installieren möchten, ctypeskönnen Sie den Job auch erledigen.
import ctypes
CF_TEXT =1
kernel32 = ctypes.windll.kernel32
kernel32.GlobalLock.argtypes =[ctypes.c_void_p]
kernel32.GlobalLock.restype = ctypes.c_void_p
kernel32.GlobalUnlock.argtypes =[ctypes.c_void_p]
user32 = ctypes.windll.user32
user32.GetClipboardData.restype = ctypes.c_void_p
def get_clipboard_text():
user32.OpenClipboard(0)try:if user32.IsClipboardFormatAvailable(CF_TEXT):
data = user32.GetClipboardData(CF_TEXT)
data_locked = kernel32.GlobalLock(data)
text = ctypes.c_char_p(data_locked)
value = text.value
kernel32.GlobalUnlock(data_locked)return value
finally:
user32.CloseClipboard()print(get_clipboard_text())
Dies scheint unter Windows 10 nicht zu funktionieren. Es wird immer "Keine" ausgegeben.
Aran-Fey
Windows 10 hat für mich gut funktioniert, solange ich Python 32-Bit verwendet habe. Ich habe die Antwort aktualisiert, um auch mit 64-Bit zu arbeiten.
Kichik
Gehen Sie diesen Fehler "erwarteter Zeichenzeiger, habe int" in der Zeile "text = ctypes.c_char_p (data_locked)", irgendeine Idee?
txemsukr
Es wäre toll, eine ähnliche Lösung zu sehen, um Text auch in die Zwischenablage zu kopieren.
Mrkbutty
11
Die am besten bewertete Antwort oben ist so seltsam, dass sie einfach die Zwischenablage löscht und dann den Inhalt erhält (der dann leer ist). Sie können die Zwischenablage löschen, um sicherzustellen, dass ein Inhaltstyp der Zwischenablage wie "formatierter Text" Ihren Nur-Text-Inhalt, den Sie in der Zwischenablage speichern möchten, nicht "abdeckt".
Der folgende Code ersetzt alle Zeilenumbrüche in der Zwischenablage durch Leerzeichen, entfernt dann alle doppelten Leerzeichen und speichert den Inhalt schließlich wieder in der Zwischenablage:
import win32clipboard
win32clipboard.OpenClipboard()
c = win32clipboard.GetClipboardData()
win32clipboard.EmptyClipboard()
c = c.replace('\n',' ')
c = c.replace('\r',' ')while c.find(' ')!=-1:
c = c.replace(' ',' ')
win32clipboard.SetClipboardText(c)
win32clipboard.CloseClipboard()
ist es für 3.6 geeignet? es wird erfolgreich installiert , aber wenn verwendet Paste () Methode gibt mir Fehler: „von pyside Import Version als PYSIDE_VERSION # Analyse: ignorieren ModuleNotFoundError: Kein Modul‚pyside‘genannt“. Als ich versuchte, Pyside zu installieren, heißt es, dass es in 3.6
gaurav
Ja, es sollte unter Python 3.6 funktionieren, und ich habe gerade mit Python 3.7.4 (64-Bit) getestet. In der Datei setup.py des Pakets sollten keine Abhängigkeiten zu Pyside oder anderen Paketen vorhanden sein. Sind Sie sicher, dass der Befehl Einfügen versucht, Pyside zu verwenden?
np8
Ja, der Befehl Einfügen sucht nach Pyside und da Pyside nur bis zu Python 3.4 unterstützt, gibt es einen Fehler
gaurav
8
Die Python-Standardbibliothek macht es ...
try:# Python3import tkinter as tk
exceptImportError:# Python2importTkinteras tk
def getClipboardText():
root = tk.Tk()# keep the window from showing
root.withdraw()return root.clipboard_get()
Für mein Konsolenprogramm haben die Antworten mit tkinter oben bei mir nicht ganz funktioniert, da .destroy () immer einen Fehler ausgegeben hat:
Befehl "Ereignis" kann nicht aufgerufen werden: Anwendung wurde während der Ausführung zerstört ...
oder bei Verwendung von .withdraw () hat das Konsolenfenster den Fokus nicht zurückbekommen.
Um dies zu lösen, müssen Sie auch .update () vor .destroy () aufrufen. Beispiel:
# Python 3import tkinter
r = tkinter.Tk()
text = r.clipboard_get()
r.withdraw()
r.update()
r.destroy()
Das r.withdraw () verhindert, dass der Frame für eine Millisekunde angezeigt wird, und wird dann zerstört, wodurch der Fokus wieder auf die Konsole gerichtet wird.
Antworten:
Sie können das Modul win32clipboard verwenden , das Teil von pywin32 ist .
Hier ist ein Beispiel, in dem zuerst die Daten der Zwischenablage festgelegt und dann abgerufen werden:
Eine wichtige Erinnerung aus der Dokumentation:
quelle
Sie können dies einfach über das integrierte Modul Tkinter erledigen, das im Grunde eine GUI-Bibliothek ist. Dieser Code erstellt ein leeres Widget, um den Inhalt der Zwischenablage vom Betriebssystem abzurufen.
quelle
tkinter
statt seinTkinter
. Ansonsten funktionierte es auf meinem Python 3.7.3 64bit Win10 nicht.Ich habe viele Vorschläge zur Verwendung des win32-Moduls gesehen, aber Tkinter bietet die kürzeste und einfachste Methode, die ich je gesehen habe, wie in diesem Beitrag: Wie kopiere ich eine Zeichenfolge mit Python in die Zwischenablage unter Windows?
Außerdem befindet sich Tkinter in der Python-Standardbibliothek.
quelle
Wenn Sie keine zusätzlichen Pakete installieren möchten,
ctypes
können Sie den Job auch erledigen.quelle
Die am besten bewertete Antwort oben ist so seltsam, dass sie einfach die Zwischenablage löscht und dann den Inhalt erhält (der dann leer ist). Sie können die Zwischenablage löschen, um sicherzustellen, dass ein Inhaltstyp der Zwischenablage wie "formatierter Text" Ihren Nur-Text-Inhalt, den Sie in der Zwischenablage speichern möchten, nicht "abdeckt".
Der folgende Code ersetzt alle Zeilenumbrüche in der Zwischenablage durch Leerzeichen, entfernt dann alle doppelten Leerzeichen und speichert den Inhalt schließlich wieder in der Zwischenablage:
quelle
Ich fand heraus, dass dies der einfachste Weg war, von Python aus auf die Zwischenablage zuzugreifen:
1) Installieren Sie pyperclip:
pip install pyperclip
2) Verwendung:
Getestet unter Win10 64-Bit, Python 3.5 und Python 3.7.3 (64-Bit). Scheint auch mit Nicht-ASCII-Zeichen zu funktionieren. Zu den getesteten Zeichen gehören ± ° © appliance αβγθΔΨΦåäö
quelle
Die Python-Standardbibliothek macht es ...
quelle
Probieren Sie win32clipboard aus dem win32all-Paket aus (das wahrscheinlich installiert ist, wenn Sie ActiveState Python verwenden).
Siehe Beispiel hier: http://code.activestate.com/recipes/474121/
quelle
Für mein Konsolenprogramm haben die Antworten mit tkinter oben bei mir nicht ganz funktioniert, da .destroy () immer einen Fehler ausgegeben hat:
oder bei Verwendung von .withdraw () hat das Konsolenfenster den Fokus nicht zurückbekommen.
Um dies zu lösen, müssen Sie auch .update () vor .destroy () aufrufen. Beispiel:
Das r.withdraw () verhindert, dass der Frame für eine Millisekunde angezeigt wird, und wird dann zerstört, wodurch der Fokus wieder auf die Konsole gerichtet wird.
quelle
Verwenden Sie die Zwischenablage der Pythons-Bibliothek
Es wird einfach so verwendet:
quelle
from pyperclip import copy, paste
.Ein nicht sehr direkter Trick:
Verwenden Sie den Hotkey pyautogui:
Daher können Sie die Daten der Zwischenablage nach Belieben einfügen.
quelle