使用 Python 实现复制粘贴的功能

简介: 使用 Python 实现复制粘贴的功能

楔子



pandas 里面有一个 pd.read_clipboard 函数,可以根据你复制的内容生成DataFrame。是的,就是我们平时选中,然后 Ctrl+C 时拷贝的内容。所以比较神奇,那么 pandas 到底是怎么做到的,它是怎么读出我们使用 Ctrl +C 复制的内容呢。

看了一下源码,不同的操作系统使用的复制方式不同,Windows 比较复杂,方法是使用了ctypes,然后调用了操作系统的一个动态库实现的;而 macOS 和 Linux 比较简单,调用的是内置的命令。

下面我们来看看如何在这三个系统上实现复制粘贴的功能。


Windows 上的复制粘贴



们说 Windows 是使用 ctypes 调用动态库实现的,比较麻烦。但是我们知道 Python 有一个 pywin32 模块,对于 Windows 操作系统提供的接口进行了封装。所以在 Windows 上我们会使用 pywin32 来实现复制粘贴功能。

该模块直接通过 pip install pywin32 安装即可。

import win32clipboard as wcb
import win32con as wc
# 打开复制粘贴板
wcb.OpenClipboard()
# 我们之前可能已经 Ctrl + C 了
# 这里是清空目前 Ctrl + C 复制的内容
# 但显然没有这一步也无所谓,因为第二次复制会覆盖第一次复制的内容
wcb.EmptyClipboard()
# 将内容写入复制粘贴板,第一个参数是 win32con.CF_TEXT
# 第二个参数是我们要复制的内容,编码的时候指定为 "gbk"
wcb.SetClipboardData(wc.CF_TEXT, "古明地觉".encode("gbk"))
# 关闭复制粘贴板
wcb.CloseClipboard()

然后我们 Ctrl+V 粘贴就会得到 "古明地觉" 这个字符串,另外编码的时候要使用 gbk,因为我当前操作系统默认编码使用的是 gbk,所以会对我们输入的字节使用 gbk 解码。因此如果使用 utf-8 编码的话,那么粘贴之后得到的就会是乱码。当然具体编码根据你当前的机器决定。

复制我们实现了,下面来看看怎么实现粘贴。

import win32clipboard as wcb
import win32con as wc
wcb.OpenClipboard()
# 获取粘贴板内容,既然是获取,那么只需要一个参数即可
# 会返回已经使用 Ctrl + C 复制的内容
data = wcb.GetClipboardData(wc.CF_TEXT)
# 关闭复制粘贴板
wcb.CloseClipboard()
# 然后随便 Ctrl+C 拷贝一段内容
# 下面就会将拷贝的内容打印出来
print(data.decode("gbk"))

还是很简单的,我们上面使用的模块是 win32 系列,所以它只适用于 Windows 系统。那如果我想在 Linux 和 macOS 中实现怎么办呢?也很简单,事实上,这两个系统实现起来反而会更简单,因为自带了相关的命令。


macOS 上的复制粘贴



macOS 自带了相关命令,我们只需要通过 subprocess 模块去调用即可,举个例子:

非常简单,那么代码要如何实现呢?

import subprocess
# 实现拷贝
def copy(text):
    p = subprocess.Popen(["pbcopy", "w"],
                         stdin=subprocess.PIPE,
                         close_fds=True)
    # 将内容拷贝起来,注意 macOS 的编码默认是 utf-8
    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")
copy("古明地觉的编程教室")
print(paste())  # 古明地觉的编程教室

以上代码在 macOS 上执行,由于自带了复制粘贴相关的命令,操作起来就比 Windows 方便多了。


Linux 上的复制粘贴



Linux 也提供了复制粘贴的命令,叫 xclip,但这个命令不是自带的,我们需要使用 yum 安装。

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 通过命令实复制粘贴没什么因为我们都是通过 SSH 远程连接到公司的服务器,这种情况下 xclip 是不生效的。

当然,感觉这个功能也没多大用,当做兴趣了解一下就行。


pyperclip 实现复制粘贴



最后我们再来介绍一个模块,叫 pyperclip,它对不同的操作系统的复制粘贴功能进行了封装,可以简化我们的操作。举个例子:

import pyperclip
# 复制
pyperclip.copy("哼哼")
# 粘贴
print(pyperclip.paste())  # 哼哼

还是很方便的,以后就可以使用这个模块,自动帮我们屏蔽了操作系统间的差异。另外,这个模块只支持复制文本。

var first_sceen__time = (+new Date()); if ("" == 1 && document.getElementById('js_content')) { document.getElementById('js_content').addEventListener("selectstart",function(e){ e.preventDefault(); }); }

相关文章
|
9天前
|
缓存 测试技术 Python
Python装饰器:优雅地增强函数功能
Python装饰器:优雅地增强函数功能
160 99
|
9天前
|
存储 缓存 测试技术
Python装饰器:优雅地增强函数功能
Python装饰器:优雅地增强函数功能
143 98
|
14天前
|
缓存 Python
Python中的装饰器:优雅地增强函数功能
Python中的装饰器:优雅地增强函数功能
|
5月前
|
SQL 安全 算法
解读 Python 3.14:模板字符串、惰性类型、Zstd压缩等7大核心功能升级
Python 3.14 引入了七大核心技术特性,大幅提升开发效率与应用安全性。其中包括:t-strings(PEP 750)提供更安全灵活的字符串处理;类型注解惰性求值(PEP 649)优化启动性能;外部调试器API标准化(PEP 768)增强调试体验;原生支持Zstandard压缩算法(PEP 784)提高效率;REPL交互环境升级更友好;UUID模块扩展支持新标准并优化性能;finally块语义强化(PEP 765)确保资源清理可靠性。这些改进使Python在后端开发、数据科学等领域更具竞争力。
203 5
解读 Python 3.14:模板字符串、惰性类型、Zstd压缩等7大核心功能升级
|
9月前
|
安全 前端开发 数据库
Python 语言结合 Flask 框架来实现一个基础的代购商品管理、用户下单等功能的简易系统
这是一个使用 Python 和 Flask 框架实现的简易代购系统示例,涵盖商品管理、用户注册登录、订单创建及查看等功能。通过 SQLAlchemy 进行数据库操作,支持添加商品、展示详情、库存管理等。用户可注册登录并下单,系统会检查库存并记录订单。此代码仅为参考,实际应用需进一步完善,如增强安全性、集成支付接口、优化界面等。
|
10月前
|
开发框架 数据建模 中间件
Python中的装饰器:简化代码,增强功能
在Python的世界里,装饰器是那些静悄悄的幕后英雄。它们不张扬,却能默默地为函数或类增添强大的功能。本文将带你了解装饰器的魅力所在,从基础概念到实际应用,我们一步步揭开装饰器的神秘面纱。准备好了吗?让我们开始这段简洁而富有启发性的旅程吧!
132 6
|
11月前
|
IDE 数据挖掘 开发工具
Python作为一种广受欢迎的高级编程语言,以其简洁的语法和强大的功能吸引了众多初学者和专业开发者
Python作为一种广受欢迎的高级编程语言,以其简洁的语法和强大的功能吸引了众多初学者和专业开发者
236 7
|
11月前
|
存储 缓存 测试技术
Python中的装饰器:功能增强与代码复用的利器
在Python编程中,装饰器是一种强大而灵活的工具,它允许开发者以简洁优雅的方式增强函数或方法的功能。本文将深入探讨装饰器的定义、工作原理、应用场景以及如何自定义装饰器。通过实例演示,我们将展示装饰器如何在不修改原有代码的基础上添加新的行为,从而提高代码的可读性、可维护性和复用性。此外,我们还将讨论装饰器在实际应用中的一些最佳实践和潜在陷阱。
|
8月前
|
人工智能 搜索推荐 测试技术
通义灵码 2.0 智能编码功能评测:Deepseek 加持下的 Python 开发体验
通义灵码 2.0 智能编码功能评测:Deepseek 加持下的 Python 开发体验
308 11
|
7月前
|
SQL 关系型数据库 数据库连接

推荐镜像

更多