如何从Python中的(Windows)剪贴板中读取文本?
如何从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
来自文档的重要提示:
当窗口完成检查或更改剪贴板时,通过调用CloseClipboardclosures剪贴板。 这使其他窗口可以访问剪贴板。 调用CloseClipboard后不要在剪贴板上放置对象。
我见过很多关于使用win32模块的build议,但是Tkinter提供了我见过的最简单和最简单的方法,就像在这篇文章中一样: 如何使用Python将string复制到Windows上的剪贴板?
另外,Tkinter是在Python标准库中。
你可以很容易地通过Tkinter这个基本上是GUI库的内置模块来完成。 此代码创build一个空白的小部件,从操作系统获取剪贴板内容。
#from tkinter import Tk # Python 3 from Tkinter import Tk Tk().clipboard_get()
上面最上面的答案是奇怪的,它只是清除剪贴板,然后获取内容(然后是空的)。 可以清除剪贴板以确保某些剪贴板内容types(如“格式化文本”)不会“覆盖”要保存在剪贴板中的纯文本内容。
下面这段代码用空格replace剪贴板中的所有换行符,然后删除所有的双空格,最后将内容保存回剪贴板:
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()
如果你不想安装额外的软件包, ctypes
也可以完成工作。
import ctypes CF_TEXT = 1 kernel32 = ctypes.windll.kernel32 user32 = ctypes.windll.user32 user32.OpenClipboard(0) if user32.IsClipboardFormatAvailable(CF_TEXT): data = user32.GetClipboardData(CF_TEXT) data_locked = kernel32.GlobalLock(data) text = ctypes.c_char_p(data_locked) print(text.value) kernel32.GlobalUnlock(data_locked) else: print('no text in clipboard') user32.CloseClipboard()
试试win32all软件包中的win32clipboard(如果你使用的是ActiveState Python,可能会安装它)。
在这里看到示例: http : //code.activestate.com/recipes/474121/
对于我的控制台程序上面的tkinter的答案不适合我,因为.destroy()总是给出错误,:
不能调用“事件”命令:应用程序已被销毁,而执行中…
或者在使用.withdraw()时,控制台窗口没有得到焦点。
为了解决这个问题,你还必须在.destroy()之前调用.update()。 例:
# Python 3 import tkinter r = tkinter.Tk() text = r.clipboard_get() r.withdraw() r.update() r.destroy()
r.withdraw()可以防止框架显示一个毫秒,然后它将被销毁,将焦点返回给控制台。
使用Pythons库剪贴板
它简单地使用像这样:
import clipboard clipboard.copy("this text is now in the clipboard") print clipboard.paste()
我发现这是从python访问剪贴板的最简单的方法:
1)安装pyperclip: pip install pyperclip
2)用法:
import pyperclip s = pyperclip.paste() pyperclip.copy(s) # the type of s is string
testingWin10 64位,Python 3.5。 似乎也使用非ASCII字符。 被testing的字符包括±αβγθΔΨΦååö