135
Mới! Lưu câu hỏi hoặc câu trả lời và sắp xếp nội dung yêu thích của bạn. Tìm hiểu thêm.
Learn more.
Làm cách nào để đọc văn bản từ clipboard [Windows] với Python?
DREFTYMAC
30.4K26 Huy hiệu vàng116 Huy hiệu bạc178 Huy hiệu đồng26 gold badges116 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.5553 Huy hiệu vàng15 Huy hiệu bạc 30 Huy hiệu Đồng3 gold badges15 silver badges30 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.1327 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.4K10 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
5081 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,8543 huy hiệu vàng41 Huy hiệu bạc58 Huy hiệu đồng3 gold badges41 silver badges58 bronze badges
Đã trả lời ngày 4 tháng 4 năm 2018 lúc 8:42Apr 4, 2018 at 8:42
2
Đố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,9906 Huy hiệu vàng42 Huy hiệu bạc46 Huy hiệu đồng6 gold badges42 silver badges46 bronze badges
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
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
Một thủ thuật không trực tiếp lắm:
Sử dụng phím nóng pyautogui:
Import pyautogui
pyautogui.hotkey['ctrl', 'v']
Do đó, 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
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
4835 Huy hiệu bạc16 Huy hiệu Đồng5 silver badges16 bronze badges