Làm cách nào để đọc văn bản từ clipboard [Windows] với Python?
DREFTYMAC
30.3k26 Huy hiệu vàng115 Huy hiệu bạc178 Huy hiệu đồng26 gold badges115 silver badges178 bronze badges
Hỏi ngày 19 tháng 9 năm 2008 lúc 11:09Sep 19, 2008 at 11:09
2
Bạn có thể sử dụng mô -đun có tên Win32Clipboard, là một phần của PYWIN32.
Dưới đây là một ví dụ đầu tiên đặt dữ liệu clipboard sau đó nhận được nó:
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
Một lời nhắc nhở quan trọng từ tài liệu:
Khi cửa sổ đã hoàn tất việc kiểm tra hoặc thay đổi bảng tạm, hãy đóng bảng tạm bằng cách gọi ClostClipboard. Điều này cho phép các cửa sổ khác truy cập vào bảng tạm. Không đặt một đối tượng trên bảng tạm sau khi gọi ClostClipboard.
Graham
2.5253 huy hiệu vàng15 Huy hiệu bạc29 Huy hiệu đồng3 gold badges15 silver badges29 bronze badges
Đã trả lời ngày 19 tháng 9 năm 2008 lúc 11:20Sep 19, 2008 at 11:20
SakinsakinSakin
3.2473 Huy hiệu vàng23 Huy hiệu bạc27 Huy hiệu đồng3 gold badges23 silver badges27 bronze badges
5
Bạn có thể dễ dàng thực hiện việc này thông qua mô-đun tích hợp Tkinter, về cơ bản là một thư viện GUI. Mã này tạo ra một tiện ích trống để lấy nội dung Clipboard từ HĐH.
from tkinter import Tk # Python 3
#from Tkinter import Tk # for Python 2.x
Tk[].clipboard_get[]
Đã trả lời ngày 24 tháng 5 năm 2014 lúc 11:58May 24, 2014 at 11:58
Kmonsoorkmonsoorkmonsoor
7.1127 Huy hiệu vàng42 Huy hiệu bạc55 Huy hiệu Đồng7 gold badges42 silver badges55 bronze badges
1
Tôi thấy PyPerclip là cách dễ nhất để có quyền truy cập vào bảng tạm từ Python:
Cài đặt pyperclip:
3from tkinter import Tk # Python 3 #from Tkinter import Tk # for Python 2.x Tk[].clipboard_get[]
Usage:
import pyperclip
s = pyperclip.paste[]
pyperclip.copy[s]
# the type of s is string
Với hỗ trợ Windows, Linux và Mac, và dường như cũng hoạt động với các ký tự không phải ASCII. Các ký tự được thử nghiệm bao gồm ± ° © © αβγθδψφåäö
Đã trả lời ngày 3 tháng 7 năm 2016 lúc 15:54Jul 3, 2016 at 15:54
np8np8np8
23.2K10 Huy hiệu vàng80 Huy hiệu bạc90 Huy hiệu Đồng10 gold badges80 silver badges90 bronze badges
6
Nếu bạn không muốn cài đặt các gói bổ sung,
from tkinter import Tk # Python 3
#from Tkinter import Tk # for Python 2.x
Tk[].clipboard_get[]
4 cũng có thể hoàn thành công việc.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[]]
Đã trả lời ngày 25 tháng 4 năm 2014 lúc 5:54Apr 25, 2014 at 5:54
Kichikkichikkichik
31.5K6 Huy hiệu vàng87 Huy hiệu bạc106 Huy hiệu đồng6 gold badges87 silver badges106 bronze badges
5
Câu trả lời được nâng cấp nhiều nhất ở trên là kỳ lạ theo cách mà nó chỉ đơn giản là xóa bảng tạm và sau đó nhận được nội dung [lúc đó trống rỗng]. Người ta có thể xóa bảng tạm để chắc chắn rằng một số loại nội dung clipboard như "văn bản được định hình" không "bao gồm" nội dung văn bản đơn giản mà bạn muốn lưu trong bảng tạm.
Đoạn mã sau đây thay thế tất cả các dòng mới trong bảng tạm bằng không gian, sau đó xóa tất cả các không gian đôi và cuối cùng lưu nội dung trở lại bảng tạm:
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[]
Đã trả lời ngày 19 tháng 6 năm 2012 lúc 8:00Jun 19, 2012 at 8:00
sinh raborn
4981 Huy hiệu vàng4 Huy hiệu bạc13 Huy hiệu đồng1 gold badge4 silver badges13 bronze badges
Thư viện tiêu chuẩn Python làm điều đó ...
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[]
Ankostis
7,8343 huy hiệu vàng41 Huy hiệu bạc57 Huy hiệu đồng3 gold badges41 silver badges57 bronze badges
Đã trả lời ngày 4 tháng 4 năm 2018 lúc 8:42Apr 4, 2018 at 8:42
2
Sử dụng bảng tạm thư của Pythons
Nó chỉ đơn giản là được sử dụng như thế này:
import clipboard
clipboard.copy["this text is now in the clipboard"]
print clipboard.paste[]
Đã trả lời ngày 27 tháng 4 năm 2016 lúc 10:19Apr 27, 2016 at 10:19
DandanDan
Huy hiệu đồng 1491 Bạc4 Huy hiệu đồng1 silver badge4 bronze badges
3
Đối với chương trình giao diện điều khiển của tôi, các câu trả lời với tkinter ở trên không hoàn toàn phù hợp với tôi vì .destroy [] luôn gây ra lỗi,:console program the answers with tkinter above did not quite work for me because the .destroy[] always gave an error,:
Không thể gọi lệnh "Sự kiện": Ứng dụng đã bị phá hủy trong khi thực thi ...
hoặc khi sử dụng .WithDraw [] cửa sổ bảng điều khiển không lấy lại tiêu điểm.
Để giải quyết điều này, bạn cũng phải gọi .Update [] trước .destroy []. Thí dụ:
# Python 3
import tkinter
r = tkinter.Tk[]
text = r.clipboard_get[]
r.withdraw[]
r.update[]
r.destroy[]
R.WithDraw [] ngăn chặn khung hình hiển thị cho một milisecond, và sau đó nó sẽ bị phá hủy cho trọng tâm trở lại bảng điều khiển.
Đã trả lời ngày 17 tháng 1 năm 2015 lúc 1:08Jan 17, 2015 at 1:08
user136036user136036user136036
9,9406 Huy hiệu vàng41 Huy hiệu bạc46 Huy hiệu đồng6 gold badges41 silver badges46 bronze badges
Một thủ thuật không trực tiếp lắm:
Sử dụng phím nóng pyautogui:
________số 8Do đó, bạn có thể dán dữ liệu bảng tạm như bạn muốn.
Đã trả lời ngày 9 tháng 7 năm 2019 lúc 7:06Jul 9, 2019 at 7:06
1
Sau 12 năm, tôi có một giải pháp và bạn có thể sử dụng nó mà không cần cài đặt bất kỳ gói nào.
from tkinter import Tk, TclError
from time import sleep
while True:
try:
clipboard = Tk[].clipboard_get[]
print[clipboard]
sleep[5]
except TclError:
print["Clipboard is empty."]
sleep[5]
Đã trả lời ngày 29 tháng 4 năm 2021 lúc 19:17Apr 29, 2021 at 19:17
from tkinter import Tk # Python 3
#from Tkinter import Tk # for Python 2.x
Tk[].clipboard_get[]
0Đã trả lời ngày 7 tháng 12 năm 2021 lúc 4:21Dec 7, 2021 at 4:21
AthiiathiiAthii
952 huy hiệu bạc11 huy hiệu đồng2 silver badges11 bronze badges
1
Tại sao không thử gọi PowerShell?
from tkinter import Tk # Python 3
#from Tkinter import Tk # for Python 2.x
Tk[].clipboard_get[]
1Đã trả lời ngày 18 tháng 2 lúc 5:36Feb 18 at 5:36
1
Đối với người dùng Anaconda: Các bản phân phối không đi kèm với pyperclip, nhưng chúng đi kèm với gấu trúc trong đó phân phối lại pyperclip:
from tkinter import Tk # Python 3
#from Tkinter import Tk # for Python 2.x
Tk[].clipboard_get[]
2Tôi thấy điều này dễ sử dụng hơn pywin32 [cũng được bao gồm trong phân phối].
Đã trả lời ngày 6 tháng 12 năm 2021 lúc 16:14Dec 6, 2021 at 16:14
asdf101asdf101asdf101
4735 Huy hiệu bạc16 Huy hiệu Đồng5 silver badges16 bronze badges