如何从python中读取(windows)剪贴板中的文本?
您可以使用名为win32clipboard的模块,它是pywin32的一部分.
这是一个首先设置剪贴板数据然后获取它的示例:
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
文档中的一个重要提醒:
当窗口完成检查或更改剪贴板后,通过调用CloseClipboard关闭剪贴板.这使其他窗口可以访问剪贴板.调用CloseClipboard后,不要将对象放在剪贴板上.
您可以通过内置模块Tkinter轻松完成此操作,该模块基本上是一个GUI库.此代码创建一个空白小部件以从OS获取剪贴板内容.
#from tkinter import Tk # Python 3 from Tkinter import Tk Tk().clipboard_get()
我已经看到很多使用win32模块的建议,但是Tkinter提供了我见过的最简单和最简单的方法,如下文所示:如何使用Python将字符串复制到Windows上的剪贴板?
另外,Tkinter位于python标准库中.
如果您不想安装额外的软件包,ctypes
也可以完成工作.
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())
上面最受欢迎的答案是奇怪的,它只是简单地清除剪贴板然后获取内容(然后是空的).可以清除剪贴板以确保某些剪贴板内容类型(如"格式化文本")不会"覆盖"您要保存在剪贴板中的纯文本内容.
下面的代码用空格替换剪贴板中的所有换行符,然后删除所有双空格,最后将内容保存回剪贴板:
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()
我发现这是从python访问剪贴板的最简单方法:
1)安装pyperclip:
pip install pyperclip
2)用法:
import pyperclip s = pyperclip.paste() pyperclip.copy(s) # the type of s is string
在Win10 64位,Python 3.5上测试。似乎也可以使用非ASCII字符。经过测试的字符包括±°©©???????åäö
python标准库可以做到...
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()