python 远程控制_用 Python 远程控制你的电脑

用 Python 远程控制你的电脑

一、前言

很多时候我们有这种需求,因为程序运行比较耗时,但是我们没有足够的时间等待。这个时候我们就可以用 Python 做一个远程控制电脑的小工具,实现远程控制电脑。当然,我们能做的操作十分有限,我们可以通过邮件和电脑进行通讯、然后让电脑以截图的方式为我们显示程序当前运行的状态。然后我们通过这个状态进行判断,用邮件发送一些预设好的指令。如果程序意外中断了,我们可以进行让它重新运行,如果程序按照我们的预期执行了,我们就可以远程关机。

二、使用 yagmail 进行邮件发送

使用 yagmail 发邮件非常简单,我们首先需要安装两个模块:pip install yagmailpip install keyring

2.1、发送一个简单的邮件

我们用 yagmail 来发一封简单的邮件试试:import yagmailimport keyringsender = '发件邮箱'password = '发件人密码'receiver = '收件邮箱'# 注册yagmail.register(sender, password)# 用 SMTP 服务器发邮件yag = yagmail.SMTP(user=sender, host='smtp.163.com')# 设置邮件的内容contents = ['Do not go gentle into that good night!']# 发送邮件yag.send(receiver, '邮件主题', contents=contents)

这里密码可以使用真实密码,也可以使用授权码。授权码的获得需要到各个邮件的网页获取,这里以网易邮箱为例:

215296418_1_20210211123455708

我们进入网页版邮箱,依次点击 1、2,进入如下页面:

215296418_2_20210211123455865

点击开启,然后按照指引获取授权码即可。

在连接邮箱服务器的时候,我们设置的一个 host,这个同样需要在邮箱网页中获取。其中 163 的邮箱地址为 smtp.163.com,QQ 邮箱服务器地址为 smtp.qq.com,其它邮箱的可以自己查找一下。

邮箱内容是一个列表,我们现在是放入了一句话。

在调用 send 方法发送邮件时,我们需要传入几个参数。第一个是收件人,第二个是邮件的主题,第三个就是邮件的内容了。邮件内容我们传入开始的内容列表。大家可以使用自己的邮箱测试一下。

2.2、发送附件

yagmail 非常智能,我们不需要像原始的 email 模块一样,先将附件上传到邮箱服务器,然后再发给收件人。yagmail 会自动识别内容中的资源文件,然后自动上传:import yagmailimport keyringsender = '发件邮箱'password = '发件人密码'receiver = '收件邮箱'# 注册yagmail.register(sender, password)# 用 SMTP 服务器发邮件yag = yagmail.SMTP(user=sender, host='smtp.163.com')# 设置邮件的内容contents = ['im.jpg']# 发送邮件yag.send(receiver, '邮件主题', contents=contents)

其中 im.jpg 是我本地的一张图片,在发送的时候 yagmail 会自动识别,然后发送出去。我们没做什么修改,就完成了附件的发送。

我们也可以直接发送带有图片的邮件,而不是以附件的形式发送:import yagmailimport keyringsender = '发件邮箱'password = '发件人密码'receiver = '收件邮箱'# 注册yagmail.register(sender, password)yag = yagmail.SMTP(user=sender, host='smtp.163.com')contents = ['这是一张图片',yagmail.inline('im.jpg')]yag.send(receiver, '邮件主题', contents=contents)

我们只要用 yagmail.inline 包含图片路径即可。不过需要注意,发送的内容不能单是一张图片。

三、邮件读取

邮件的读取需要使用到 imbox 模块。我们需要先使用 keyring 模块读取密码,keyring 可以读取到在 yagmail 中注册了的邮箱密码:import yagmailimport keyringfrom imbox import Imboxsender = '你的邮箱'# 获取邮箱密码password = keyring.get_password(sender)# 读取邮箱邮件with Imbox('imap.163.com', sender, password, ssl=True) as imbox:# 读取所有未读邮件all_msg = imbox.messages(unread=True)

Imbox 对象就是我们的邮箱对象,里面包含了所有邮箱信息。我们调用 messages 方法就可以获取所有邮件,如果我们将 unread 设置为 True,则表示读取未读邮件。获取了所有邮件,我们就可以查看更多信息了:import yagmailimport keyringfrom imbox import Imboxsender = '你的邮箱'# 获取邮箱密码password = keyring.get_password(sender)# 读取邮箱邮件with Imbox('imap.163.com', sender, password, ssl=True) as imbox:# 读取所有未读邮件all_msg = imbox.messages(unread=True)# 遍历邮件for uid, message in all_msg:# 输出邮件的主题print(message.subject)# 标记已读imbox.mark_seen(uid)# 获取邮件的文本内容msg = message.body['plain']

我们要实现控制电脑就需要一直读取,我们可以使用 schedule 模块设置定时任务:import timeimport scheduledef func():print('test')schedule.every(2).seconds.do(func)while True:schedule.run_pending()time.sleep(1)

这样的话,可以每两秒执行一次 func 函数。

四、开发电脑控制工具

我们定义一个 ComputerController 类,用于控制电脑。该类的最基本方法就发邮件和收邮件:import timeimport yagmailimport keyringimport schedulefrom imbox import Imboxclass ComputerController():TIME_SPACE = 10SMTP_163 = 'smtp.163.com'SMTP_QQ = 'smtp.qq.com'def __init__(self, user, receiver):self.user = userself.receiver = receiver# 注册yagmail.register(self.user, '你的密码')def send_main(self, msg):'''发邮件'''yag = yagmail.SMTP(user=self.user, host=self.SMTP_163)contents = [msg]yag.send(self.receiver, '来自电脑的邮件', contents=contents)def receive_mail(self):'''收邮件'''# 读取密码password = keyring.get_password('yagmail', self.user)with Imbox('imap.163.com', 'sockwz@163.com', password, ssl=True) as imbox:all_msg = imbox.messages(unread=True)for uid, message in all_msg:if '110' == message.subject:# 标记已读imbox.mark_seen(uid)msg = message.body['plain']print(msg)def run_controller(self):# 定时读取邮件schedule.every(self.TIME_SPACE).seconds.do(controller.receive_mail)while True:schedule.run_pending()time.sleep(self.TIME_SPACE)

我们只需要创建这个类就可以了:if __name__ == '__main__':controller = ComputerController('发件邮箱', '收件邮箱')controller.run_controller()

我们需要传入收件邮箱和发件邮箱,另外还需要在 init 方法中,修改密码即可。

五、实现一些预设功能

下面我们实现一些小功能。

5.1、截图from PIL import ImageGrabdef grab_windows(self):im = ImageGrab.grab()im.save('status.jpg')

使用 Pillow 模块需要先安装:pip install pillow

5.2、关机import osdef shut_down(self):'''关机'''os.system('shutdown /s /t 0')

这个是通用的两个功能。另外我们可以使用 pynput 模块控制键盘,进行一些操作。这个需要根据自己电脑的情况操作,比如我使用 PyCharm 运行程序可以使用下列代码运行程序:def run_program(self):'''运行程序'''with self.kb.pressed(Key.shift):self.kb.press(Key.f10)self.kb.release(Key.f10)

大家可以自己定制一些操作。整个程序完整代码如下:import osimport timeimport yagmailimport keyringimport schedulefrom imbox import Imboxfrom PIL import ImageGrabfrom pynput.keyboard import *class ComputerController():TIME_SPACE = 10SMTP_163 = 'smtp.163.com'SMTP_QQ = 'smtp.qq.com'kb = Controller()def __init__(self, user, receiver):self.user = userself.receiver = receiver# 注册yagmail.register(self.user, '授权码或密码')def send_main(self, msg):'''发邮件'''yag = yagmail.SMTP(user=self.user, host=self.SMTP_163)contents = [msg]yag.send(self.receiver, '来自电脑的邮件', contents=contents)def receive_mail(self):'''收邮件'''# 读取密码password = keyring.get_password('yagmail', self.user)with Imbox('imap.163.com', 'sockwz@163.com', password, ssl=True) as imbox:all_msg = imbox.messages(unread=True)for uid, message in all_msg:if '110' == message.subject:# 标记已读imbox.mark_seen(uid)msg = message.body['plain']if msg[0].__contains__('截图'):# 截图self.grab_windows()# 发送截图self.send_main('status.jpg')if msg[0].__contains__('重启'):self.restart_server()time.sleep(3)self.grab_windows()self.send_main('status.jpg')if msg[0].__contains__('关机'):self.shut_down()def grab_windows(self):im = ImageGrab.grab()im.save('status.jpg')def restart_server(self):time.sleep(3)os.system('shutdown')time.sleep(3)os.system('startup')def run_program(self):'''运行程序'''with self.kb.pressed(Key.shift):self.kb.press(Key.f10)self.kb.release(Key.f10)def shut_down(self):'''关机'''os.system('shutdown /s /t 0')def run_controller(self):schedule.every(self.TIME_SPACE).seconds.do(controller.receive_mail)while True:schedule.run_pending()time.sleep(self.TIME_SPACE)if __name__ == '__main__':controller = ComputerController('发件邮箱', '收件邮箱')controller.run_controller()

我们在读取邮件时只读取主题为 110 的邮件,这样可以避免干扰邮件。所以我们在发送邮件时需要将主题设置为 110,而邮件内容则是一些关键词。比如截图就是截图操作,关机就是关机操作。这个可以自己定义。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/533608.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

摄像头图像分析目标物体大小位置_一文读懂图像定位及跟踪技术

文 | 传感器技术在科学技术日新月异的今天,人们对机器设备的智能性、自主性要求也越来越高,希望其完全替代人的角色,把人们从繁重、危险的工作任务中解脱出来,而能否像人一样具有感知周围环境的能力已成为设备实现智能化自主化的关…

pat乙级相当于什么水平_雅思6.5是什么水平?相当于托福多少分?

雅思和托福是当前社会中非母语人士的主流英语水平测试。准备出国留学的学生对这两项考试并不陌生。对于一些学生来说,仅靠雅思成绩并不足以申请他们最喜欢的学校。特别是对于申请北美院校的学生,托福成绩是申请时提交语言成绩的优先考虑事项。那么&#…

java时间方法_JAVA处理日期时间常用方法

转载JAVA处理日期时间常用方法:1.java.util.CalendarCalendar 类是一个抽象类,它为特定瞬间与一组诸如 YEAR、MONTH、DAY_OF_MONTH、HOUR 等 日历字段之间的转换提供了一些方法,并为操作日历字段(例如获得下星期的日期)提供了一些方法。瞬间可…

双飞翼布局内容不换行_web前端入门到实战:圣杯布局和双飞翼布局

稍微了解前端的人都知道,圣杯布局和双飞翼布局是前端面试时必问的问题,因为它既能体现你懂HTML结构又能体现出你对DIVCSS布局的掌握,毕竟我们学习CSS主要就是为了更好地布局带来最好的用户体验嘛~事实上,圣杯布局其实和…

数据结构知识点总结_大牛带你学 | 考研数据结构中线性表中顺序结构的知识点总结...

前言我们都知道,数据结构中逻辑结构可以划分为线性结构(线性表)与非线性结构两大类。而存储结构指的是数据元素在计算机中的存储及其逻辑关系的表现,也就是在计算机当中对逻辑结构的表示。线性表的存储结构主要有顺序结构和链式结构两种实现形式。本文主…

java矩形翻转_如何判断一个点在旋转后的矩形中

前言最近在做的一款游戏中,用到点与旋转矩形的判定来获得一个选中的物体。在此做个记录如图所示,黄色的颜料屏是旋转的,如果不做处理直接判断点是否在矩形中,那么点击红点的位置会判定为选中物体。显然这是不对的。如果物体没有旋…

openssl 生成证书_CentOS7 httpd(Apache)SSL 证书部署

在之前我的文章中我已经搭建了nextcloud服务器,现在我们需要通过域名及https访问怎么办1. 进行了简单的httpd设置后,就可以为网站添加SSL证书功能了。2. 首先得获取证书,有了证书才能添加。我们采用本地上传的方式将SSL证书上传到CentOS上。获…

FJ的字符串java问题_蓝桥杯VIP试题 之 基础练习 FJ的字符串- JAVA

问题描述FJ在沙盘上写了这样一些字符串:A1 “A”A2 “ABA”A3 “ABACABA”A4 “ABACABADABACABA”… …你能找出其中的规律并写所有的数列AN吗?输入格式仅有一个数:N ≤ 26。输出格式请输出相应的字符串AN,以一个换行符结束。…

java编写系统登录界面_java 登陆界面怎么写,连接数据库后

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼界面是package 界面类;import javax.jws.soap.SOAPBinding.Use;import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JOptionPane;import javax.swing.JPanel;import javax.swing…

我的世界seus光影java版下载_我的世界0.17SEUS PE光影材质包(水反高清)下载

我的世界0.17SEUS PE光影材质包已经震撼发布,随着我的世界pe0.17系列版本疯狂的出现,很多玩家都有点开始不适应了,毕竟这个更新的频率和速度太快了,0.16.0版本还没有玩够了,下面给大家提供我的世界0.17SEUS PE光影材质…

针式打印机风格英文字体_可爱漂亮的圣诞节和新年贺卡艺术字体推荐!

圣诞节即将到来,各种相应的促销活动和宴会搞起来,今天macz小编为您带来几款风格可爱漂亮的圣诞节和新年贺卡艺术字体推荐!可以用于卡片、海报、邀请函、徽标、产品介绍、T恤等,效果魅力非常哦!可爱漂亮的圣诞节和新年贺…

miniui展示日历能点击_2020年日历设计,除了366天有新字体,还有新形式

点击上方蓝字,把我设置为星标☆吧今天是12月1日,距离2020年还有最后一个月。在我们度过的日子中,我们应该铭记每一天,每一个日子。讲究仪式感的人,才是生活真正的智者。那么,对于2020年的日历,应…

容器中apscheduler不执行_APScheduler:定时任务框架

APScheduler:定时任务框架安装文档: https://apscheduler.readthedocs.io/en/stable/userguide.html安装$ pip install apscheduler>>> import apscheduler>>> apscheduler.version3.6.3组件APScheduler由一下四部分组成triggers:触发器,指定定时任务执行的时…

织梦php网站修改教程,织梦DEDEcms织梦软件模型增加图集功能教程(含修改文件下载)...

这篇文章主要为大家详细介绍了织梦DEDEcms织梦软件模型增加图集功能教程(含修改文件下载),具有一定的参考价值,感兴趣的小伙伴们可以参考一下,有需要的朋友可以收藏方便以后借鉴。织梦DEDEcms织梦软件模型增加图集功能,这是今天361模板要给大家分享的。下…

nikita popov php,PHP中对performance的考虑点

Nikita Popov 在他的演讲中谈了几个PHP 程序中和performance相关的point。1.PHP使用shared memory, preload的方式事先分配,而只有在所有的处理结束之后,share memory 才会断开和所有进程或者thread之间的联系。光是opcode,FPM的设定还不足以…

优化matlab作业,现代设计优化算法MATLAB实现

开篇语前阵子做现代设计方法的时候,发现网上很是缺乏这种作业形式的简易算法实现,所以特地来简书写一篇。有两份,一份是我的(说来惭愧,我的大部分都是在网上找的代码,然后在自己的电脑上跑一次,跑出来了就行…

多因子选选股MATLAB代码,金工研报:利用卷积神经网络进行多因子选股

首先,我们先来看一下通过卷积神经网络选股模型的整体流程,然后再根据每一步流程进行介绍,具体如下图所示:1、数据获取用于历史回测数据来自所有A股股票,其中剔除了ST股以及上市3个月的股票,另外&#xff0c…

matlab bad apple,【bad apple】matlab制作矩阵苹果~

有屏幕的地方就有bad apple那么作为一名工科生,熟练的操♂作马桶萝卜(matlab)是一项基本技能下面开始讲解如何用matlab制作别具一格的“矩阵苹果”~实验环境matlab R2018a原版bad apple视频技术要求可以即时演算图形可以将处理后的每帧图形合并成新的视频先上代码%t…

服务器ip直接访问php怎么写,php - 如何实现用公网ip访问到服务器上的网页?

服务器系统是Windows Server 2012 R2,已经部署了IIS、PHP和MySQL,能够在云服务器上通过localhost打开php网页,(放在服务器wwwroot上的index.php)已在ISS管理器中添加网站,但编辑网站绑定时,在ip地址中填入了服务器的公…

vb6 打印选项对话框_图纸打印次数太多,不知道哪次才是最新的?用打印戳记区分效果好...

原创:就说我在开发区使用AutoCAD从事设计工作的朋友们不知道有没遇到过这种情况:图纸在反复修改打印的过程中,由于图纸内容高度相似,往往搞不清究竟哪个才是最新版本的图纸了。这种情况下,细致入微地去核对非常麻烦&am…