Python真神奇,带你体验另类的“全自动编程”

【Python】使用 termios、fcntl 模拟终端键盘输入 通过这篇文章我们讲解了如何通过 python 来模拟终端的键盘输入,并学习控制 docker 中的终端,以及最后使用 tmux 管理多终端 阅读详情

近年来“自动编程”、“智能编程”方面的项目层出不穷,例如AutoML、kite,以及最近风靡一时的python_autocomplete,这些项目有一个共同点,就是基于机器学习模型,致力于提升代码补全和自动生成水平。


不过今天要展示的自动编程与上述概念不同,这次我们不讲学术、不论实用,抱着娱乐的心态体验一把另类的“全自动编程”模式。

640?wx_fmt=gif



01.

项目介绍


今天要介绍的这个库的名字叫pynput,与人工智能无关,这是一个控制和监控计算机输入设备的库,这是他的GitHub地址(详细见文末),从库的简介中可以看到,目前仅支持鼠标和键盘两种基本的输入设备。

640?wx_fmt=png

接下来我们打开文档,看看pynput究竟有哪些功能。从文档目录(下图)来看,关于pynput的说明大体分为三个部分:分别是鼠标事件、键盘事件和平台限制。


先来简单说一下平台限制,因为事关外部输入设备,在不同的操作系统中肯定会有一些差异和功能限制,例如Linux下需要设置环境变量$ DISPLAY、MAC操作系统限制了对键盘的监控、Windows中进程间的虚拟事件传递可能受限等等。


总的来说,平台限制并不影响基本的使用(特别是在Windows系统中),我们暂且放下不谈。

640?wx_fmt=png


接着我们重点聊一聊鼠标事件和键盘事件。先来说鼠标事件部分,pynput对鼠标事件的处理主要分为控制和监控两大部分。

在鼠标控制部分,可以通过代码模拟鼠标的移动、单击、双击、滚轮等操作,下面这张图就是文档中的演示代码,函数名称和实际事件名基本一致,很容易理解。

640?wx_fmt=png


在鼠标事件的监控部分,监控任务Listener实际上是一个threading.Thread对象,采用回调函数的方式实时监控鼠标行为(下图是文档中的演示代码)。既然是threading.Thread对象,Listener当然也就有阻塞和非阻塞两种模式,一般来说,如果想要监控物理鼠标的行为,使用阻塞模式比较合适,如果想要监控pynput的模拟鼠标操作,建议采用非阻塞模式。

640?wx_fmt=png


再来看键盘事件部分,和鼠标事件类似,pynput对键盘事件的处理也是分为控制和监控两大部分,函数结构和操作模式也跟鼠标事件基本相同,这里就不展示文档中的演示代码了。有一点需要注意的是,键盘操作中有一些特殊方法,比如“ctrl+”、‘“shift+”、“alt+”这类的组合键,还有F1~FN、backspace、delete、insert等特殊功能键,在pynput中都有专门的定义,在操作时可以直接使用。


02.

功能演示


介绍完基本功能,我们就写一段代码试一试pynput的设备控制以及监控效果,由于上文中重点介绍了关于鼠标事件的处理,这里就以键盘事件处理为例进行演示。


我们设计这样一个程序:

  • 主线程:随机生成20个(准确地说是19个)小写英文字母,并用pynput模拟键盘输入,在第10个字母输入后附加输入一个退格键(backspace)。

  • 监控线程:对键盘的按键和松开两种操作进行监控,同时在控制台输出相关信息,当遇到退格键(backspace)松开这一事件时,终止监控线程。

为了便于观察,在每个随机字符串输入后加入一个0.5s的时间间隔,另外由于这里是要监控虚拟的键盘按键事件,因此监控线程使用非阻塞模式,代码如下:

640?wx_fmt=png


一起来看下这段代码的动态执行情况,在下面这段动画中字符(包括退格键)的输入全部都是基于pynput自动实现的。

640?wx_fmt=gif

(动态图,盯着看几秒哦)


通过上面这个动画可以看到,在程序运行的前半部分,输入结果和监控结果是完全一致的,直到退格键(backspace)事件发生后,控制台就不再输出监控信息,这是因为监控线程已经被终止掉了,但是模拟键盘输入仍然会继续,直到指定数量的字符串全部输入完毕为止。通过这个例子应该就能很好地理解pynput的监控线程了,有兴趣的朋友不妨自己体会一下。


至于鼠标事件的控制、监控功能,因为和键盘事件十分类似,这里就不再重复演示了。另外,由于鼠标没有键盘中那么多复杂的、各式各样的功能键,从某种意义上说鼠标事件的处理要比键盘事件处理更简单一些。



03.

神奇的"自动编程"

最后,我们回到今天的主题,把鼠标事件和键盘事件的控制结合起来,实现一个“全自动编程”的功能。事实上这里实现的“自动编程”与人工智能无关,也不是传统的代码匹配补全,而是控制鼠标和键盘按照我们提前设置好的步骤自动运行。

为了方便,我们就用最简单的“Hello World”来进行演示,在sublime中完成“Hello World”程序大概需要经过以下几个步骤:新建一个sublime文件——命名、保存为py文件——在新建的py文件中输入“print('Hello World')”语句——再次保存——运行新的程序。

前文讲到过,pynput可以模拟所有的鼠标和键盘操作,上面步骤中的操作自然也可以由pynput模拟完成,就跟手动操作一样。我们把以上操作全部写到脚本中,同时加入鼠标和键盘的监控线程,在脚本启动后不仅会自动编写运行“Hello World”程序,还会对鼠标和键盘的模拟操作进行实时监控,并将相关信息输出到控制台。

先来看结果,下面这个动画就是我们写的“自动编程”脚本的运行情况,整个过程全部自动执行,没有任何手动干预。

640?wx_fmt=gif

(动态图,盯着看几秒哦)


在整个过程中,所有的鼠标和键盘事件都会被监控线程记录,包括每一次键盘按键的点击和释放、鼠标的移动和点击等。

下面我们来看看这个脚本的核心代码,可以看到,我们使用pynput模拟了所有与鼠标和键盘有关的操作,使用这种方法还可以编写更加复杂的程序,只需要改变keycontroller.type的输入内容就可以。


 
keycontroller = keyboard.Controller()mousecontroller = mouse.Controller()# 新建文件keycontroller.press(keyboard.Key.ctrl_l)keycontroller.press('n')keycontroller.release(keyboard.Key.ctrl_l)keycontroller.release('n')sleep(1)# 保存文件keycontroller.press(keyboard.Key.ctrl_l)keycontroller.press('s')keycontroller.release(keyboard.Key.ctrl_l)keycontroller.release('s')sleep(1)# 输入文件名称keycontroller.type('auto{}.py'.format(random.uniform(0,99)))sleep(1)# 点击保存mousecontroller.position = (0, 0)mousecontroller.move(466, 493)mousecontroller.press(mouse.Button.left)mousecontroller.release(mouse.Button.left)sleep(1)# 输入代码keycontroller.type("print('Hello World')")keycontroller.press(keyboard.Key.space)sleep(1)# 重新保存keycontroller.press(keyboard.Key.ctrl_l)keycontroller.press('s')keycontroller.release(keyboard.Key.ctrl_l)keycontroller.release('s')sleep(1)# 运行新程序keycontroller.press(keyboard.Key.ctrl_l)keycontroller.press('b')keycontroller.release(keyboard.Key.ctrl_l)keycontroller.release('b')
# 新建文件
keycontroller.press(keyboard.Key.ctrl_l)
keycontroller.press('n')
keycontroller.release(keyboard.Key.ctrl_l)
keycontroller.release('n')
sleep(1)
# 保存文件
keycontroller.press(keyboard.Key.ctrl_l)
keycontroller.press('s')
keycontroller.release(keyboard.Key.ctrl_l)
keycontroller.release('s')
sleep(1)
# 输入文件名称
keycontroller.type('auto{}.py'.format(random.uniform(0,99)))
sleep(1)
# 点击保存
mousecontroller.position = (0, 0)
mousecontroller.move(466, 493)
mousecontroller.press(mouse.Button.left)
mousecontroller.release(mouse.Button.left)
sleep(1)
# 输入代码
keycontroller.type("print('Hello World')")
keycontroller.press(keyboard.Key.space)
sleep(1)
# 重新保存
keycontroller.press(keyboard.Key.ctrl_l)
keycontroller.press('s')
keycontroller.release(keyboard.Key.ctrl_l)
keycontroller.release('s')
sleep(1)
# 运行新程序
keycontroller.press(keyboard.Key.ctrl_l)
keycontroller.press('b')
keycontroller.release(keyboard.Key.ctrl_l)
keycontroller.release('b')

(代码可以左右滑动)


友情提示

正如本文开头所说,使用pynput实现的所谓“自动编程”仅仅是一种娱乐,并没有太多实用价值。但是pynput对于输入设备的控制和监控在实践中倒是有可能会用得上,至于如何发挥他的作用,就要看自己的想象力了。


往期热门:

值得收藏|菜鸟学Python【入门文章大全】


学习群:

小密圈人气很高的两个实战项目

小密圈的趣味实战-微信主题

3个月还没入门Python,看这100名小密圈的同学3周学Python的杰作


游戏类:

太好玩了!用Python写个弹球游戏2.0

巧妙的Python数据结构玩法|实战德州扑克



赠书方法:

为了把书给更多真正玩Python的同学,这次送书我们设定了一个的门槛,回答出这道题目的同学,可以参与抽奖!


题目:

如果数字1到5用英语写出:one,two,three,four,five,则总共使用3 + 3 + 5 + 4 + 4 = 19个字母。如果所有1到1001(包含一千零一)的数字都用英语写出来,会用多少个字母?


答案是数字,大家把答案写出来,写在公众号后面,答对的即可抽奖!


模拟键盘打字输入 工作学习中经常碰到一些无法粘贴的地方,好头疼,难道只能一个字一个字的敲?不可能,绝对不可能,小软件轻松解决 阅读详情

相关推荐

ZYNQ软件复位重启、程序跳转的实现方法(Multiboot)

目录一、增加FSBL的调试信息 一、增加FSBL的调试信息 启动过程的调试信息如下: Xilinx First Stage Boot Loader Release 2016.4 Jan 19 2020-10:35:00 Devcfg driver initialized Silicon Version 3.1 Boot mode is QSPI Single Flash Informat...

weixin_41922484的博客 2万+

chatgpt赋能python:Python怎么模拟键盘输入:一份完整的教程

模拟键盘输入是指从计算机键盘发送输入信号,以便模拟鼠标和键盘操作。这是自动化脚本编写的一种形式,它使您能够执行指定的操作,而无需使用实际的物理设备。在本文中,我们简要介绍了Python模拟键盘输入的概念以及使用PyAutoGUI的示例代码。通过学习并使用这项技术,可以轻松地编写自动化脚本,以便在不使用实际物理设备的情况下执行操作。PyAutoGUI是一个全面而易于使用的库,可用于模拟键盘和鼠标事件,以及执行其他自动化任务。本文由chatgpt生成,文章没有在chatgpt生成的基础上进行任何的修改。

laingziwei的博客 1418

基于SolidWorks宏的草图点坐标自动化提取与Excel集成

本文详细介绍了如何利用SolidWorks宏编程实现草图点坐标的自动化提取并与Excel集成,显著提升机械设计效率。通过VBA代码解析与优化,解决了人工记录坐标耗时易错的问题,并扩展了多草图批量处理、数据可视化等高级功能,适用于数控加工、质量检测等场景。

weixin_29251131的博客 461

python:写个简陋的按键精灵

本程序类似于按键精灵,代替用户执行重复性的的按键、输入文本、鼠标点击功能,可设置时间延迟。QThread、 pyqtSignal、pyautogui、PyQt5、pyhooked

weixin_64622090的博客 4789

生成mm grounding dino的onnx模型并在x-anylabeling中使用

X-AnyLabeling 是一款cvhub开发的交互式自动标注工具,其基于AnyLabeling进行构建和二次开发,在此基础上扩展并支持了许多的模型和功能,并借助Segment Anything和YOLO等主流模型提供强大的 AI 支持。其最新版基于grounding dino可以实现开放词汇检测及生成掩码。2024年,MMDet 3.3.0提出了 MM-Grounding-DINO。

blanokvaffy的博客 1729

Agentic-Desktop-Pet:构建本地智能桌面助手的架构与实践

智能体(Agent)作为人工智能领域的重要概念,是指能够感知环境、自主决策并执行任务以实现目标的软件实体。其核心原理在于结合感知、决策与执行模块,通过大语言模型(LLM)等推理引擎处理信息并驱动行动。这种架构的技术价值在于将AI的认知能力与具体的操作系统环境深度融合,从而创造出能主动理解用户上下文、提供个性化服务的智能伙伴。在应用场景上,智能体技术正从云端对话机器人向本地化、场景化的桌面助手演进,旨在解决传统自动化工具缺乏智能、而纯聊天机器人脱离操作环境的问题。本文探讨的Agentic-Desktop-Pe

weixin_27210125的博客 623

python工具模拟键盘输入

程序启动后 按快捷键,ctrl + alt + 9 可模拟键盘操作,快速输入剪切板中的内容。

qq_40602449的博客 1340

如何设置Xilinx以太网IP核的Pause帧处理

这里要注意,为什么是或,第一个条件是该功能使能取反,也就是说,如果你设置使能不打开的话,这个条件是直接满足的;先来看图中第二句,判断该以太网数据包为Global Pause帧(gpp),首先要满足Step1,然后是由上图中第二句代码(assign global_pause_packet)后面的所有项“与”(&&)起来的,就是说要满足后面所有的项,分别是DA符合,SA符合,Etype符合,Opcode符合,并且使能了该功能(即设置ctl_rx_enable_gpp=1)。如果没通过,则进入Step3。

qq_43416206的博客 618

Python真神奇,带你体验另类的“全自动编程”!

近年来“自动编程”、“智能编程”方面的项目层出不穷,例如AutoML、kite,以及最近风靡一时的python_autocomplete,这些项目有一个共同点,就是基于机器学习模型,致力于提升代码补全和自动生成水平。 不过今天要展示的自动编程与上述概念不同,这次我们不讲学术、不论实用,抱着娱乐的心态体验一把另类的“全自动编程”模式。 ...

Pythoncxy的博客 471

2025_NIPS_Truthful Aggregation of LLMs with an Application to Online Advertising

大型语言模型(LLMs)生成内容的 revenue 变现是在线广告的下一个前沿领域。我们考虑这样一种场景:广告商旨在影响LLM的回复,而平台则寻求最大化广告商价值并确保用户满意度。核心挑战在于,广告商的偏好通常与用户偏好存在冲突,且广告商可能误报其偏好。为解决这一问题,我们提出MOSAIC——一种拍卖机制,它确保真实申报是广告商的占优策略,并使每个广告商的效用与其对社会福利的贡献保持一致。重要的是,该机制无需LLM微调或访问模型权重,且随着计算资源的增加,可证明收敛到最优微调LLM的输出。

c_cpp_csharp的专栏 81

大数据分析实验,包含五个子实验:wordCount实验,PageRank实验,关系挖掘实验,k-means算法,推荐系统算法。

大数据分析实验,包含五个子实验:wordCount实验,PageRank实验,关系挖掘实验,k-means算法,推荐系统算法。

805

python自动编程_Python真神奇,带你体验另类的“全自动编程”

原标题:Python真神奇,带你体验另类的“全自动编程”近年来“自动编程”、“智能编程”方面的项目层出不穷,例如AutoML、kite,以及最近风靡一时的python_autocomplete,这些项目有一个共同点,就是基于机器学习模型,致力于提升代码补全和自动生成水平。不过今天要展示的自动编程与上述概念不同,这次我们不讲学术、不论实用,抱着娱乐的心态体验一把另类的“全自动编程”模式。 项目介绍今...

weixin_39713833的博客 121

LOFIC / 全局快门在移动端的可行性:曝光容限、读出噪声与算力预算

手机端引入 LOFIC 与全局快门的核心权衡在于:在有限像素面积与功耗下,如何换取更高的动态范围与运动场景鲁棒性。LOFIC 通过侧向溢流到积分电容扩大满井并保持较高转换增益,全局快门在帧内一次性采样消除行时序伪影,但需付出像素填充率、读出噪声与片上存储功耗的代价。本文以工程可实操为目标,给出像素与读出链的简化模型、曝光损益测算、数据率与带宽估算、端到端算力与热预算方法,配套寄存器配置流程、帧内/帧间切换策略与验证清单,帮助在真实移动 SoC 与 ISP 约束下完成可行性评估与原型落地。

努力分享一些人工智能、计算机视觉、影像等相关的知识干货! 1140

python控制台动画_Python真神奇,带你体验另类的“全自动编程”

近年来“自动编程”、“智能编程”方面的项目层出不穷,例如AutoML、kite,以及最近风靡一时的python_autocomplete,这些项目有一个共同点,就是基于机器学习模型,致力于提升代码补全和自动生成水平。不过今天要展示的自动编程与上述概念不同,这次我们不讲学术、不论实用,抱着娱乐的心态体验一把另类的“全自动编程”模式。01.项目介绍今天要介绍的这个库的名字叫pynput,与人工智能无关...

weixin_35764712的博客 489

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

windows 脚本 鼠标自动点击_Python真神奇,带你体验另类的“全自动编程”

作者:小小程序员链接:https://zhuanlan.zhihu.com/p/83506482来源:知乎著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。年来“自动编程”、“智能编程”方面的项目层出不穷,例如AutoML、kite,以及最近风靡一时的python_autocomplete,这些项目有一个共同点,就是基于机器学习模型,致力于提升代码补全和自动生成水平。不过今天要展...

weixin_39933724的博客 3495

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

python 模拟键盘输入_Python真神奇,带你体验另类的“全自动编程”

近年来“自动编程”、“智能编程”方面的项目层出不穷,例如AutoML、kite,以及最近风靡一时的python_autocomplete,这些项目有一个共同点,就是基于机器学习模型,致力于提升代码补全和自动生成水平。不过今天要展示的自动编程与上述概念不同,这次我们不讲学术、不论实用,抱着娱乐的心态体验一把另类的“全自动编程”模式。01.项目介绍今天要介绍的这个库的名字叫pynput,与人...

weixin_39907713的博客 492

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

ideanew对象后自动补全_Python真神奇,带你体验另类的“全自动编程”

作者:小小程序员链接:https://zhuanlan.zhihu.com/p/83506482来源:知乎著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。年来“自动编程”、“智能编程”方面的项目层出不穷,例如AutoML、kite,以及最近风靡一时的python_autocomplete,这些项目有一个共同点,就是基于机器学习模型,致力于提升代码补全和自动生成水平。不过今天要展...

weixin_39723920的博客 83

python编程自动入门教程_Python真神奇,带你体验另类的“全自动编程”|简明python教程|python入门|python教程...

https://www.xin3721.com/eschool/pythonxin3721/近年来“自动编程”、“智能编程”方面的项目层出不穷,例如AutoML、kite,以及最近风靡一时的python_autocomplete,这些项目有一个共同点,就是基于机器学习模型,致力于提升代码补全和自动生成水平。不过今天要展示的自动编程与上述概念不同,这次我们不讲学术、不论实用,抱着娱乐的心态体验一把另...

weixin_39595430的博客 357

Python 真神奇,带你体验另类的“全自动编程”

近年来“自动编程”、“智能编程”方面的项目层出不穷,例如 AutoML、kite,以及最近风靡一时的 python_autocomplete,这些项目有一个共同点,就是基...

静觅 1216
上一篇: 聊聊这个磨人的Bug
下一篇: 送书5本,粉丝福利
菜鸟学Python
博客等级 码龄9年 8062粉丝 571原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值