Oto przykład, który najpierw ustawia dane ze schowka, a następnie je pobiera:
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
Ważne przypomnienie z dokumentacji:
Gdy okno zakończy badanie lub zmianę schowka, zamknij schowek, wywołując CloseClipboard. Umożliwia to innym oknom dostęp do schowka. Nie umieszczaj obiektu w schowku po wywołaniu CloseClipboard.
Czy wiesz, czy istnieje sposób użycia instrukcji „with”?
Norfeldt,
3
Warto zauważyć, że w py34, win7, SetClipboardText nie działał bez poprzedzającego wywołania EmptyClipboard
CoderTao
Ten moduł jest przydatny, jeśli chcesz wykonać bardziej złożone operacje, np. Wyciągnąć zawartość w formacie HTML ze schowka. Zobacz stackoverflow.com/questions/17298897/…
xji,
2
@Norfeldt Jeśli nie ma natywnego sposobu, możesz łatwo utworzyć własny niestandardowy obiekt, który obsługuje „z”
Elijas Dapšauskas
41
można to łatwo zrobić za pomocą wbudowanego modułu Tkinter, który jest w zasadzie biblioteką GUI. Ten kod tworzy pusty widżet w celu pobrania zawartości schowka z systemu operacyjnego.
Kod, który pobierze wartość schowka za pośrednictwem Tkinter: from Tkinter import Tk [\ nl] r = Tk () [\ nl] result = r.selection_get (selection = "CLIPBOARD") [\ nl] r.destroy ()
mgkrebbs
18
Jeśli nie chcesz instalować dodatkowych pakietów, ctypesmożesz również wykonać zadanie.
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
defget_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())
czy nadaje się do 3.6? został pomyślnie zainstalowany, ale przy użyciu metody paste () pojawia się błąd: "z wersji importu PySide jako PYSIDE_VERSION # analiza: ignoruj ModuleNotFoundError: Brak modułu o nazwie 'PySide'". Kiedy próbowałem zainstalować Pyside, pojawia się komunikat, że nie jest obsługiwany w 3.6
gaurav
Tak, powinno działać na Pythonie 3.6, a właśnie testowałem z Pythonem 3.7.4 (64-bit). Patrząc na plik setup.py pakietu, nie powinien on mieć żadnych zależności od Pyside ani żadnych innych pakietów. Czy na pewno polecenie wklejania próbuje użyć Pyside?
np8
Tak, polecenie wklejania szuka Pyside, a ponieważ Pyside obsługuje tylko Pythona do wersji 3.4, powoduje błąd
gaurav
Wydaje się, że jest to najprostsze rozwiązanie dla WSL z
pythonem3.6
11
Najbardziej pozytywna odpowiedź powyżej jest dziwna, ponieważ po prostu czyści schowek, a następnie pobiera zawartość (która jest następnie pusta). Można wyczyścić schowek, aby mieć pewność, że niektóre typy zawartości schowka, takie jak „tekst sformatowany”, nie „zakrywają” zawartości zwykłego tekstu, którą chcesz zapisać w schowku.
Poniższy fragment kodu zastępuje wszystkie znaki nowej linii w schowku spacjami, a następnie usuwa wszystkie podwójne spacje i ostatecznie zapisuje zawartość z powrotem do schowka:
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()
Odpowiedzi:
Możesz użyć modułu o nazwie win32clipboard , który jest częścią pywin32 .
Oto przykład, który najpierw ustawia dane ze schowka, a następnie je pobiera:
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
Ważne przypomnienie z dokumentacji:
źródło
można to łatwo zrobić za pomocą wbudowanego modułu Tkinter, który jest w zasadzie biblioteką GUI. Ten kod tworzy pusty widżet w celu pobrania zawartości schowka z systemu operacyjnego.
#from tkinter import Tk # Python 3 from Tkinter import Tk Tk().clipboard_get()
źródło
tkinter
zamiastTkinter
. W przeciwnym razie nie działało na moim Pythonie 3.7.3 64-bitowym win10.Widziałem wiele sugestii dotyczących użycia modułu win32, ale Tkinter zapewnia najkrótszą i najłatwiejszą metodę, jaką widziałem, jak w tym poście: Jak skopiować ciąg do schowka w systemie Windows przy użyciu Pythona?
Dodatkowo Tkinter znajduje się w standardowej bibliotece Pythona.
źródło
Jeśli nie chcesz instalować dodatkowych pakietów,
ctypes
możesz również wykonać zadanie.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())
źródło
Dowiedziałem się, że to najłatwiejszy sposób na uzyskanie dostępu do schowka z Pythona:
1) Zainstaluj pyperclip:
pip install pyperclip
2) użycie:
import pyperclip s = pyperclip.paste() pyperclip.copy(s) # the type of s is string
Testowane na 64-bitowych systemach Win10, Python 3.5 i Python 3.7.3 (64-bitowe). Wydaje się, że działa również ze znakami spoza zestawu ASCII. Testowane postacie to ± ° © © αβγθΔΨΦåäö
źródło
Najbardziej pozytywna odpowiedź powyżej jest dziwna, ponieważ po prostu czyści schowek, a następnie pobiera zawartość (która jest następnie pusta). Można wyczyścić schowek, aby mieć pewność, że niektóre typy zawartości schowka, takie jak „tekst sformatowany”, nie „zakrywają” zawartości zwykłego tekstu, którą chcesz zapisać w schowku.
Poniższy fragment kodu zastępuje wszystkie znaki nowej linii w schowku spacjami, a następnie usuwa wszystkie podwójne spacje i ostatecznie zapisuje zawartość z powrotem do schowka:
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()
źródło
Biblioteka standardowa Pythona robi to ...
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()
źródło
Użyj schowka biblioteki Pythona
Jest po prostu używany w ten sposób:
import clipboard clipboard.copy("this text is now in the clipboard") print clipboard.paste()
źródło
from pyperclip import copy, paste
.clipboard
to lepsze imię. Ta funkcja powinna być zawarta w standardowej bibliotece Pythona.Wypróbuj win32clipboard z pakietu win32all (prawdopodobnie jest on zainstalowany, jeśli korzystasz z ActiveState Python).
Zobacz próbkę tutaj: http://code.activestate.com/recipes/474121/
źródło
W moim programie konsolowym odpowiedzi z tkinter powyżej nie do końca działały, ponieważ .destroy () zawsze dawał błąd:
lub podczas używania .withdraw () okno konsoli nie odzyskało fokusu.
Aby rozwiązać ten problem, musisz również wywołać .update () przed .destroy (). Przykład:
# Python 3 import tkinter r = tkinter.Tk() text = r.clipboard_get() r.withdraw() r.update() r.destroy()
R.Withdraw () zapobiega wyświetlaniu klatki przez milisekundę, a następnie zostanie zniszczona, przywracając fokus konsoli.
źródło
Niezbyt bezpośrednia sztuczka:
Użyj skrótu pyautogui:
Import pyautogui pyautogui.hotkey('ctrl', 'v')
Dlatego możesz wkleić dane ze schowka, jak chcesz.
źródło