Risposte:
Puoi usare il modulo chiamato win32clipboard , che fa parte di pywin32 .
Ecco un esempio che prima imposta i dati degli appunti e poi li ottiene:
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
Un importante promemoria dalla documentazione:
Quando la finestra ha terminato di esaminare o modificare gli appunti, chiudere gli appunti chiamando CloseClipboard. Ciò consente ad altre finestre di accedere agli appunti. Non posizionare un oggetto negli appunti dopo aver chiamato CloseClipboard.
puoi farlo facilmente attraverso il modulo integrato Tkinter che è fondamentalmente una libreria GUI. Questo codice crea un widget vuoto per ottenere il contenuto degli appunti dal sistema operativo.
#from tkinter import Tk # Python 3
from Tkinter import Tk
Tk().clipboard_get()
tkinter
invece di Tkinter
. Altrimenti non ha funzionato sul mio Python 3.7.3 64bit win10.
Ho visto molti suggerimenti per utilizzare il modulo win32, ma Tkinter fornisce il metodo più breve e più semplice che ho visto, come in questo post: Come faccio a copiare una stringa negli appunti su Windows usando Python?
Inoltre, Tkinter è nella libreria standard di Python.
Se non vuoi installare pacchetti extra, ctypes
puoi anche portare a termine il lavoro.
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())
La risposta più votata sopra è strana in quanto cancella semplicemente gli Appunti e quindi ottiene il contenuto (che è quindi vuoto). È possibile cancellare gli appunti per essere sicuri che alcuni tipi di contenuto degli appunti come "testo formattato" non "coprano" il contenuto di testo normale che si desidera salvare negli appunti.
La parte di codice seguente sostituisce tutte le nuove righe negli appunti con spazi, quindi rimuove tutti i doppi spazi e infine salva il contenuto negli appunti:
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()
Ho scoperto che questo era il modo più semplice per accedere agli appunti da Python:
1) Installa pyperclip:
pip install pyperclip
2) Utilizzo:
import pyperclip
s = pyperclip.paste()
pyperclip.copy(s)
# the type of s is string
Testato su Win10 64 bit, Python 3.5 e Python 3.7.3 (64 bit). Sembra funzionare anche con caratteri non ASCII. I caratteri testati includono ± ° © © αβγθΔΨΦåäö
La libreria standard python lo fa ...
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()
Prova win32clipboard dal pacchetto win32all (che è probabilmente installato se sei su ActiveState Python).
Vedi esempio qui: http://code.activestate.com/recipes/474121/
Per il mio programma di console le risposte con tkinter sopra non hanno funzionato per me perché .destroy () dava sempre un errore:
impossibile richiamare il comando "evento": l'applicazione è stata distrutta durante l'esecuzione ...
o quando si utilizza .withdraw () la finestra della console non ha recuperato il focus.
Per risolvere questo problema devi anche chiamare .update () prima di .destroy (). Esempio:
# Python 3
import tkinter
r = tkinter.Tk()
text = r.clipboard_get()
r.withdraw()
r.update()
r.destroy()
R.withdraw () impedisce la visualizzazione del frame per un millisecondo, quindi verrà distrutto restituendo il focus alla console.
Usa gli Appunti della libreria Pythons
È semplicemente usato in questo modo:
import clipboard
clipboard.copy("this text is now in the clipboard")
print clipboard.paste()
from pyperclip import copy, paste
.