如何用python实现复制粘贴功能

 更新时间:2021年3月11日 20:00  点击:1906

楔子

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)拷贝起来
  p.communicate(input=text.encode("utf-8"))
   
# 实现粘贴  
def paste():
  p = subprocess.Popen(["pbpaste", "r"], stdout=subprocess.PIPE, close_fds=True)
  stdout, stderr = p.communicate()
  #返回粘贴内容
  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
    )
  p.communicate(input=text.encode("utf-8"))
   
# 实现粘贴  
def paste():
  p = subprocess.Popen(
      ["xclip", "-selection", "c", "-o"], stdout=subprocess.PIPE, close_fds=True
    )
  stdout, stderr = p.communicate()
  return stdout.decode("utf-8") 

可以看到Linux和macOS还是比较简单的,因为操作系统提供了这个命令,我们可以直接使用。但是Windows则没有提供,所以需要使用ctypes,或者使用封装好的pywin32。

另外还是那句话,Linux上执行需要有显示器,我以我阿里云上的centos为例。

提示我们无法打开显示器,因为根本就没有。 当然,感觉这个功能也没多大用,当做兴趣了解一下就行。

以上就是如何用python实现复制粘贴功能的详细内容,更多关于python实现复制粘贴功能的资料请关注猪先飞其它相关文章!

[!--infotagslink--]

相关文章

  • python opencv 画外接矩形框的完整代码

    这篇文章主要介绍了python-opencv-画外接矩形框的实例代码,代码简单易懂,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2021-09-04
  • Python astype(np.float)函数使用方法解析

    这篇文章主要介绍了Python astype(np.float)函数使用方法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-06-08
  • 最炫Python烟花代码全解析

    2022虎年新年即将来临,小编为大家带来了一个利用Python编写的虎年烟花特效,堪称全网最绚烂,文中的示例代码简洁易懂,感兴趣的同学可以动手试一试...2022-02-14
  • python中numpy.empty()函数实例讲解

    在本篇文章里小编给大家分享的是一篇关于python中numpy.empty()函数实例讲解内容,对此有兴趣的朋友们可以学习下。...2021-02-06
  • python-for x in range的用法(注意要点、细节)

    这篇文章主要介绍了python-for x in range的用法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-05-10
  • Python 图片转数组,二进制互转操作

    这篇文章主要介绍了Python 图片转数组,二进制互转操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-03-09
  • Python中的imread()函数用法说明

    这篇文章主要介绍了Python中的imread()函数用法说明,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-03-16
  • python实现b站直播自动发送弹幕功能

    这篇文章主要介绍了python如何实现b站直播自动发送弹幕,帮助大家更好的理解和学习使用python,感兴趣的朋友可以了解下...2021-02-20
  • python Matplotlib基础--如何添加文本和标注

    这篇文章主要介绍了python Matplotlib基础--如何添加文本和标注,帮助大家更好的利用Matplotlib绘制图表,感兴趣的朋友可以了解下...2021-01-26
  • 解决python 使用openpyxl读写大文件的坑

    这篇文章主要介绍了解决python 使用openpyxl读写大文件的坑,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-03-13
  • python 计算方位角实例(根据两点的坐标计算)

    今天小编就为大家分享一篇python 计算方位角实例(根据两点的坐标计算),具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-04-27
  • python实现双色球随机选号

    这篇文章主要为大家详细介绍了python实现双色球随机选号,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2020-05-02
  • python中使用np.delete()的实例方法

    在本篇文章里小编给大家整理的是一篇关于python中使用np.delete()的实例方法,对此有兴趣的朋友们可以学习参考下。...2021-02-01
  • MySQL快速复制数据库数据表的方法

    某些时候,例如为了搭建一个测试环境,或者克隆一个网站,需要复制一个已存在的mysql数据库。使用以下方法,可以非常简单地实现。假设已经存在的数据库名字叫db1,想要复制一份,命名为newdb。步骤如下:1. 首先创建新的数据库newd...2015-10-21
  • 使用Python的pencolor函数实现渐变色功能

    这篇文章主要介绍了使用Python的pencolor函数实现渐变色功能,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2021-03-09
  • python自动化办公操作PPT的实现

    这篇文章主要介绍了python自动化办公操作PPT的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-02-05
  • Python getsizeof()和getsize()区分详解

    这篇文章主要介绍了Python getsizeof()和getsize()区分详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-11-20
  • PyTorch一小时掌握之迁移学习篇

    这篇文章主要介绍了PyTorch一小时掌握之迁移学习篇,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2021-09-08
  • python实现学生通讯录管理系统

    这篇文章主要为大家详细介绍了python实现学生通讯录管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-02-25
  • 解决python 两个时间戳相减出现结果错误的问题

    这篇文章主要介绍了解决python 两个时间戳相减出现结果错误的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-03-12