如何⽤python实现复制粘贴功能
⽬录
楔⼦
实现复制
实现粘贴
macOS实现复制粘贴
Linux实现复制粘贴
楔⼦
pandas⾥⾯有这么⼀个⽅法:pd.read_clipboard,可以根据你复制的内容⽣成DataFrame。是的,就是我们平时选中,然后复制、或者Ctrl+C时拷贝的内容,所以⽐较神奇,那么pandas到底是怎么做到的,它是怎么读出我们使⽤Ctrl +C复制的内容呢。
看了⼀下源码,⾮常的复杂,⽅法是使⽤了ctypes,然后调⽤了操作系统的⼀个动态库实现的。ctypes
是专门来调⽤C、
C++使⽤的,但是我们知道Python有⼀个pywin32模块,对于Windows操作系统提供的接⼝进⾏了封装。所以下⾯我们使⽤pywin32来实现我们平时使⽤的复制粘贴功能。
⾸先是安装:pip install pywin32。
实现复制
下⾯我们来看看如何使⽤这个模块实现复制功能,另外关于pywin32这个模块,它的家族⾮常的庞⼤。
最好的化妆品排行榜
⾥⾯有很多的win32xxx.pyd,我们直接调⽤就⾏。
# win32clipboard专门⽤来复制粘贴的
import win32clipboard as wcb
import win32con as wc
# 打开复制粘贴板
wcb.OpenClipboard()
# 我们之前可能已经Ctrl+C了,这⾥是清空⽬前Ctrl+C复制的内容。但是经过测试,这⼀步即使没有也⽆所谓
wcb.EmptyClipboard()
# 将内容写⼊复制粘贴板,第⼀个参数win32con.CF_TEXT不⽤管,我也不知道它是⼲什么的
# 关键第⼆个参数,就是我们要复制的内容,⼀定要传⼊字节
wcb.SetClipboardData(wc.CF_TEXT, "古明地觉世界第⼀可爱".encode("gbk"))
# 关闭复制粘贴板
wcb.CloseClipboard()
然后我们 Ctrl+V 粘贴就会得到 "古明地觉世界第⼀可爱" 这个字符串,再强调⼀次,这⾥不能传⼊字符串、⽽是要传⼊字节。如果传⼊字符串,那么中⽂会得到乱码、ascii⽂本只会得到第⼀个字符。
另外这⾥要使⽤ gbk,因为我当前操作系统默认编码使⽤的是gbk,所以会对我们输⼊的字节使⽤ gbk
解码。因此如果使⽤utf-8编码的话,那么粘贴得到的依旧是乱码。当然具体根据你当前的机器决定。
实现粘贴
复制我们实现了,下⾯来看看怎么实现粘贴。
# win32clipboard专门⽤来复制粘贴的
import win32clipboard as wcb
import win32con as wc
# 打开复制粘贴板
wcb.OpenClipboard()
# 获取粘贴板内容,既然是获取,那么只需要⼀个参数即可。
颖儿减肥前后对比照# 会返回已经使⽤Ctrl+C复制得到的内容
data = wcb.GetClipboardData(wc.CF_TEXT)
# 关闭复制粘贴板
wcb.CloseClipboard()
# 得到的依旧是字节
"""
我们在"实现复制"的时候说过,因为Ctrl+V默认使⽤gbk解码,所以在模拟Ctrl+C的时候我们也要传⼊使⽤gbk编码的字符串
闫妮女儿那么在"实现粘贴"的时候也是⼀样,我们使⽤Ctrl+C复制的时候,也会使⽤gbk编码成字节
那么这⾥模拟Ctrl+V得到字节之后也要使⽤gbk解码
"""
# 然后随便Ctrl+C拷贝⼀段内容,下⾯就会将拷贝的内容打印出来
print(data.decode("gbk"))
我们上⾯的模块是win32家族,所以它只适⽤于Windows系统,不适⽤于Linux和macOS。那么如果我想在Linux和macOS中实现怎么办呢?也很简单,事实上,这两个系统实现起来反⽽会更简单,因为⾃带了相关的命令。
macOS实现复制粘贴
import subprocess
# 实现拷贝
def copy(text):
p = subprocess.Popen(["pbcopy", "w"], stdin=subprocess.PIPE, close_fds=True)
# 将内容(text)拷贝起来
pmunicate(de("utf-8"))
# 实现粘贴
def paste():
p = subprocess.Popen(["pbpaste", "r"], stdout=subprocess.PIPE, close_fds=True)
stdout, stderr = pmunicate()
#返回粘贴内容
return stdout.decode("utf-8")
Linux实现复制粘贴
注意:Linux上实现复制粘贴实际上意义不⼤,因为实现复制粘贴的功能的⼀个前提是你必须要有显⽰器。
⽽公司使⽤的服务器肯定不会带显⽰器的,使⽤的时候都是通过xshell远程连接。但是Linux上也提供了相应的命令,叫xclip,当然这个命令不是⾃带的,使⽤的时候可能还要安装:yum install xclip。下⾯来看看怎么通过 Python 调⽤,实际上和macOS⼀样。
房产证加名字费用import subprocess
# 实现拷贝
def copy(text):
p = subprocess.Popen(
咖啡拉花["xclip", "-selection", "c"], stdin=subprocess.PIPE, close_fds=True
)
pmunicate(de("utf-8"))
# 实现粘贴
张艾嘉图片
def paste():
p = subprocess.Popen(
["xclip", "-selection", "c", "-o"], stdout=subprocess.PIPE, close_fds=True
)
stdout, stderr = pmunicate()
return stdout.decode("utf-8")
可以看到Linux和macOS还是⽐较简单的,因为操作系统提供了这个命令,我们可以直接使⽤。但是Windows则没有提供,所以需要使⽤ctypes,或者使⽤封装好的pywin32。
另外还是那句话,Linux上执⾏需要有显⽰器,我以我阿⾥云上的centos为例。
提⽰我们⽆法打开显⽰器,因为根本就没有。当然,感觉这个功能也没多⼤⽤,当做兴趣了解⼀下就⾏。
以上就是如何⽤python实现复制粘贴功能的详细内容,更多关于python实现复制粘贴功能的资料请关注其它相关⽂章!