dalam kasus saya, hanya dan jawaban yang berhasil, yang menggunakan paket clipboard .
Soorena
Jawaban:
106
Anda dapat menggunakan modul bernama win32clipboard , yang merupakan bagian dari pywin32 .
Berikut adalah contoh yang pertama-tama menyetel data papan klip lalu mendapatkannya:
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
Pengingat penting dari dokumentasi:
Ketika jendela selesai memeriksa atau mengubah clipboard, tutup clipboard dengan memanggil CloseClipboard. Ini memungkinkan jendela lain untuk mengakses papan klip. Jangan letakkan objek di clipboard setelah memanggil CloseClipboard.
Apakah Anda tahu jika ada cara untuk menggunakan pernyataan `with´?
Norfeldt
3
Perlu dicatat, di py34, win7, SetClipboardText tidak berfungsi tanpa panggilan sebelumnya ke EmptyClipboard
CoderTao
Modul ini berguna jika Anda ingin melakukan operasi yang lebih kompleks, misalnya mengeluarkan konten berformat HTML dari papan klip. Lihat stackoverflow.com/questions/17298897/…
xji
2
@Norfeldt Jika tidak ada cara asli, Anda dapat dengan mudah membuat objek kustom Anda sendiri yang mendukung "dengan"
Elijas Dapšauskas
43
Anda dapat dengan mudah menyelesaikan ini melalui modul Tkinter bawaan yang pada dasarnya merupakan pustaka GUI. Kode ini membuat widget kosong untuk mendapatkan konten clipboard dari OS.
Beberapa kode yang akan mendapatkan nilai clipboard melalui Tkinter: dari Tkinter import Tk [\ nl] r = Tk () [\ nl] result = r.selection_get (selection = "CLIPBOARD") [\ nl] r.destroy ()
mgkrebbs
18
Jika Anda tidak ingin menginstal paket tambahan, ctypesdapat menyelesaikan pekerjaan juga.
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())
apakah itu cocok untuk 3.6? itu diinstal dengan sukses tetapi ketika digunakan paste () metode itu memberi saya kesalahan: "dari versi impor PySide sebagai PYSIDE_VERSION # analysis: abaikan ModuleNotFoundError: Tidak ada modul bernama 'PySide'". Ketika saya mencoba menginstal Pyside, ia mengatakan itu tidak didukung di 3.6
gaurav
Ya, ini seharusnya berfungsi pada Python 3.6, dan saya baru saja menguji dengan Python 3.7.4 (64-bit). Melihat setup.py dari paket itu seharusnya tidak memiliki ketergantungan ke Pyside atau paket lainnya. Apakah Anda yakin bahwa perintah tempel mencoba menggunakan Pyside?
np8
Ya, perintah tempel mencari Pyside dan karena Pyside hanya mendukung hingga python 3.4, ini memberikan kesalahan
gaurav
Tampaknya ini menjadi solusi paling sederhana untuk WSL dengan python3.6
diberlakukan
11
Jawaban yang paling banyak mendapat suara positif di atas adalah aneh karena ia hanya membersihkan Clipboard dan kemudian mendapatkan kontennya (yang kemudian kosong). Seseorang dapat menghapus papan klip untuk memastikan bahwa beberapa jenis konten papan klip seperti "teks berformat" tidak "menutupi" konten teks biasa yang ingin Anda simpan di papan klip.
Bagian kode berikut mengganti semua baris baru di papan klip dengan spasi, lalu menghapus semua spasi ganda dan terakhir menyimpan konten kembali ke papan klip:
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()
Jawaban:
Anda dapat menggunakan modul bernama win32clipboard , yang merupakan bagian dari pywin32 .
Berikut adalah contoh yang pertama-tama menyetel data papan klip lalu mendapatkannya:
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
Pengingat penting dari dokumentasi:
sumber
Anda dapat dengan mudah menyelesaikan ini melalui modul Tkinter bawaan yang pada dasarnya merupakan pustaka GUI. Kode ini membuat widget kosong untuk mendapatkan konten clipboard dari OS.
#from tkinter import Tk # Python 3 from Tkinter import Tk Tk().clipboard_get()
sumber
tkinter
bukanTkinter
. Jika tidak, itu tidak berfungsi pada python 3.7.3 64bit win10 saya.Saya telah melihat banyak saran untuk menggunakan modul win32, tetapi Tkinter menyediakan metode terpendek dan termudah yang pernah saya lihat, seperti dalam posting ini: Bagaimana cara menyalin string ke clipboard di Windows menggunakan Python?
Plus, Tkinter ada di pustaka standar python.
sumber
Jika Anda tidak ingin menginstal paket tambahan,
ctypes
dapat menyelesaikan pekerjaan juga.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())
sumber
Saya menemukan ini adalah cara termudah untuk mendapatkan akses ke clipboard dari python:
1) Pasang pyperclip:
pip install pyperclip
2) Penggunaan:
import pyperclip s = pyperclip.paste() pyperclip.copy(s) # the type of s is string
Diuji pada Win10 64-bit, Python 3.5 dan Python 3.7.3 (64-bit). Sepertinya bekerja dengan karakter non-ASCII juga. Karakter yang diuji meliputi ± ° © © αβγθΔΨΦåäö
sumber
Jawaban yang paling banyak mendapat suara positif di atas adalah aneh karena ia hanya membersihkan Clipboard dan kemudian mendapatkan kontennya (yang kemudian kosong). Seseorang dapat menghapus papan klip untuk memastikan bahwa beberapa jenis konten papan klip seperti "teks berformat" tidak "menutupi" konten teks biasa yang ingin Anda simpan di papan klip.
Bagian kode berikut mengganti semua baris baru di papan klip dengan spasi, lalu menghapus semua spasi ganda dan terakhir menyimpan konten kembali ke papan klip:
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()
sumber
Pustaka standar python melakukannya ...
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()
sumber
Gunakan Clipboard perpustakaan Pythons
Ini hanya digunakan seperti ini:
import clipboard clipboard.copy("this text is now in the clipboard") print clipboard.paste()
sumber
from pyperclip import copy, paste
.clipboard
adalah nama yang lebih baik. Fungsi ini harus dimasukkan dalam pustaka standar Python.Coba win32clipboard dari paket win32all (yang mungkin diinstal jika Anda menggunakan ActiveState Python).
Lihat contoh di sini: http://code.activestate.com/recipes/474121/
sumber
Untuk program konsol saya , jawaban dengan tkinter di atas tidak cukup berhasil untuk saya karena .destroy () selalu memberikan kesalahan ,:
atau saat menggunakan .withdraw () jendela konsol tidak mendapatkan fokus kembali.
Untuk mengatasi ini, Anda juga harus memanggil .update () sebelum .destroy (). Contoh:
# Python 3 import tkinter r = tkinter.Tk() text = r.clipboard_get() r.withdraw() r.update() r.destroy()
R.withdraw () mencegah frame ditampilkan selama satu milidetik, dan kemudian akan dihancurkan dengan mengembalikan fokus ke konsol.
sumber
Trik yang tidak terlalu langsung:
Gunakan hotkey pyautogui:
Import pyautogui pyautogui.hotkey('ctrl', 'v')
Oleh karena itu, Anda dapat menempelkan data papan klip sesuka Anda.
sumber