it-swarm.com.de

Wie lese ich in Python Text aus der (Windows-) Zwischenablage?

Wie lese ich in Python Text aus der (Windows-) Zwischenablage?

76
Foo42

Sie können das Modul win32clipboard verwenden, das Teil von pywin32 ist.

Hier ist ein Beispiel, bei 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 kein Objekt in der Zwischenablage, nachdem Sie CloseClipboard aufgerufen haben.

84
Sakin

sie können dies einfach über das eingebaute Modul Tkinter erledigen, bei dem es sich im Grunde um eine GUI-Bibliothek handelt. Dieser Code erstellt ein leeres Widget, um den Inhalt der Zwischenablage vom Betriebssystem abzurufen.

#from tkinter import Tk  # Python 3
from Tkinter import Tk
Tk().clipboard_get()
24
kmonsoor

Ich habe viele Vorschläge zur Verwendung des win32-Moduls gesehen, aber Tkinter bietet die kürzeste und einfachste Methode, die ich gesehen habe, wie in diesem Beitrag: Wie kopiere ich einen String in die Zwischenablage unter Windows mit Python?

Außerdem befindet sich Tkinter in der python Standardbibliothek.

20
Buttons840

Wenn Sie keine zusätzlichen Pakete installieren möchten, kann ctypes 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())
13
kichik

Die am besten bewertete Antwort oben ist so seltsam, dass sie einfach die Zwischenablage löscht und dann den Inhalt abruft (der dann leer ist). Sie können die Zwischenablage löschen, um sicherzustellen, dass ein Inhaltstyp der Zwischenablage wie "formatierter Text" Ihren in der Zwischenablage zu speichernden Nur-Text-Inhalt 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()
11
born

Ich fand heraus, dass dies der einfachste Weg ist, von Python aus auf die Zwischenablage zuzugreifen:

1) Installieren Sie pyperclip: pip install pyperclip

2) Verwendung:

import pyperclip

s = pyperclip.paste()
pyperclip.copy(s)

# the type of s is string

Getestet auf Win10 64-Bit, Python 3.5. Scheint auch mit Nicht-ASCII-Zeichen zu funktionieren. Getestete Zeichen umfassen ± ° ©)αβγθΔΨΦåäö

7
np8

Probieren Sie win32clipboard aus dem win32all-Paket aus (das ist wahrscheinlich installiert, wenn Sie mit ActiveState Python arbeiten).

Siehe Beispiel hier: http://code.activestate.com/recipes/474121/

3
Eli Bendersky

Die python Standardbibliothek macht es ...

try:
    # Python3
    import tkinter as tk
except ImportError:
    # Python2
    import Tkinter as tk

def getClipboardText():
    root = tk.Tk()
    # keep the window from showing
    root.withdraw()
    return root.clipboard_get()
3
Paul Sumpner

Für mein Konsolenprogramm haben die Antworten mit tkinter oben nicht ganz funktioniert, da die .destroy () immer einen Fehler lieferten:

befehl "event" 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 dem .destroy () aufrufen. Beispiel:

# Python 3
import 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 dann wird er zerstört, wobei der Fokus wieder auf die Konsole gerichtet wird.

3
user136036

Ein nicht sehr direkter Trick:

Verwenden Sie den Pyautogui-Hotkey:

Import pyautogui
pyautogui.hotkey('ctrl', 'v')

Daher können Sie die Daten der Zwischenablage beliebig einfügen.

1
see2

Verwenden Sie die Pythons-Bibliothek Zwischenablage

Es wird einfach so verwendet:

import clipboard
clipboard.copy("this text is now in the clipboard")
print clipboard.paste()  
1
Dan