如何从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的字符包括±αβγθΔΨΦååö