Python 远程开关机的方法


Posted in Python onNovember 18, 2020

用 Python 关机你肯定听过或者实践过,那么用 Python 开机呢?这是一个神奇的方法,教你如何用 Python 来开机。

GitHub 仓库地址:

https://github.com/injetlee/Python/tree/master/Python%20%E9%BB%91%E9%AD%94%E6%B3%95

本文目标

  • 远程开机原理
  • Python 远程开机代码实现
  • Python 关机说明

Python 开机

关于用程序来开机,是怎么做到的呢?这就是 WOL 技术 Wake-On-Lan, 利用计算机在关机或休眠状态时,网卡及主板部分仍然有微弱的供电,当然要保持电源是插上的,而且是有线连接。所以即使在关机情况下,网卡还是有一定运作能力的,可以监听计算机外部的网上广播信息,当发现特定格式的信息后就会执行开机。现在的主板基本都支持。

只需要在网络适配器属性中配置下面两个选项

Python 远程开关机的方法

Python 远程开关机的方法

下图这个勾不能选上,我们要保证网卡在关机后仍有供电,如果你关机后,网口的灯不亮了,就不行了,要保持网口灯亮。

Python 远程开关机的方法

这个特定数据也有个好听的名字叫 Magic Packet(魔法数据包)。一般用过 UDP 协议进行广播。端口一般是7或者9. 魔法数据包总是以"FF FF FF FF FF FF" 连续6个 "FF",后面是 MAC 地址信息,一旦网卡侦测到数据包内容,就会唤醒目标计算机。

我们还是来看一下代码怎么写,代码涉及到 UDP 网络编程这块,后面会专门写写网络编程这块内容。
此函数只需输入目标计算机的 MAC 地址即可,在局域网中(当然,如果你的计算机有公网IP,那么在公网中也是可以的)另一台计算机上运行此程序,目标计算机即可自动开机。

代码如下,代码本身很短,原理也很简单:

def wake_up(mac='DC-4A-3E-78-3E-0A'):
  MAC = mac
  BROADCAST = "192.168.0.255"
  if len(MAC) != 17:
    raise ValueError("MAC address should be set as form 'XX-XX-XX-XX-XX-XX'")
  mac_address = MAC.replace("-", '')
  data = ''.join(['FFFFFFFFFFFF', mac_address * 20]) # 构造原始数据格式
  send_data = b''

  # 把原始数据转换为16进制字节数组,
  for i in range(0, len(data), 2):
    send_data = b''.join([send_data, struct.pack('B', int(data[i: i + 2], 16))])
  print(send_data)

  # 通过socket广播出去,为避免失败,间隔广播三次
  try:
    sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    sock.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)
    sock.sendto(send_data, (BROADCAST, 7))
    time.sleep(1)
    sock.sendto(send_data, (BROADCAST, 7))
    time.sleep(1)
    sock.sendto(send_data, (BROADCAST, 7))

    print("Done")
  except Exception as e:

    print(e)

Python 关机

关机来说相对就容易多了,网上也有很多现成的解决方案。大多数是用程序扫描邮箱,如果收到关机相关关键词的邮件,则程序自动执行关机命令。
另外如果只是在局域网里实现关机,或者你有公网 IP 地址的话,也可以在本地计算机起一个服务,比如用 Flask 运行在5000端口。向5000这个地址发送指令即可。
本机程序中需要有一条执行关机的命令即可

import os
os.system('shutdown -s -t 00')

以上就是Python 远程开关机的方法的详细内容,更多关于python 远程开关机的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
Django1.3添加app提示模块不存在的解决方法
Aug 26 Python
Python实现读写sqlite3数据库并将统计数据写入Excel的方法示例
Aug 07 Python
Python基于百度AI的文字识别的示例
Apr 21 Python
Python连接Mssql基础教程之Python库pymssql
Sep 16 Python
python后端接收前端回传的文件方法
Jan 02 Python
python调用c++传递数组的实例
Feb 13 Python
基于pytorch的保存和加载模型参数的方法
Aug 17 Python
flask的orm框架SQLAlchemy查询实现解析
Dec 12 Python
TensorFlow2.1.0最新版本安装详细教程
Apr 08 Python
keras的siamese(孪生网络)实现案例
Jun 12 Python
Django 权限管理(permissions)与用户组(group)详解
Nov 30 Python
pytorch Dropout过拟合的操作
May 27 Python
python 元组和列表的区别
Dec 30 #Python
基于Python爬取搜狐证券股票过程解析
Nov 18 #Python
Python + opencv对拍照得到的图片进行背景去除的实现方法
Nov 18 #Python
Anaconda的安装与虚拟环境建立
Nov 18 #Python
如何基于Python pygame实现动画跑马灯
Nov 18 #Python
Pycharm安装Qt Design快捷工具的详细教程
Nov 18 #Python
jupyter使用自动补全和切换默认浏览器的方法
Nov 18 #Python
You might like
PHP实现分页的一个示例
2006/10/09 PHP
PHP实例分享判断客户端是否使用代理服务器及其匿名级别
2014/06/04 PHP
详解PHP的Yii框架中扩展的安装与使用
2016/04/01 PHP
PHP从零开始打造自己的MVC框架之路由类实现方法分析
2019/06/03 PHP
window.showModalDialog使用手册
2007/01/11 Javascript
jQuery1.5.1 animate方法源码阅读
2011/04/05 Javascript
js实现收缩菜单效果实例代码
2013/10/30 Javascript
Jquery Ajax方法传值到action的方法
2014/05/11 Javascript
jQuery动态创建html元素的常用方法汇总
2014/09/05 Javascript
JS验证逗号隔开可以是中文字母数字
2016/04/22 Javascript
基于Jquery插件实现跨域异步上传文件功能
2016/04/26 Javascript
JavaScript String 对象常用方法详解
2016/05/13 Javascript
Angular.js实现获取验证码倒计时60秒按钮的简单方法
2017/10/18 Javascript
vue路由跳转时判断用户是否登录功能的实现
2017/10/26 Javascript
微信小程序switch组件使用详解
2018/01/31 Javascript
vue ssr 实现方式(学习笔记)
2019/01/18 Javascript
使用layui实现树形结构的方法
2019/09/20 Javascript
python实现的登陆Discuz!论坛通用代码分享
2014/07/11 Python
Python第三方库xlrd/xlwt的安装与读写Excel表格
2017/01/21 Python
Python使用matplotlib绘制随机漫步图
2018/08/27 Python
Python求离散序列导数的示例
2019/07/10 Python
pycharm双击无响应(打不开问题解决办法)
2020/01/10 Python
使用python计算三角形的斜边例子
2020/04/15 Python
详解HTML5如何使用可选样式表为网站或应用添加黑暗模式
2020/04/07 HTML / CSS
萨克斯第五大道精品百货店: Saks Fifth Avenue
2017/04/28 全球购物
美国气象仪器、花园装饰和墙壁艺术商店:Wind & Weather
2019/05/29 全球购物
沙特阿拉伯排名第一的在线时尚购物应用程序:1Zillion
2020/08/08 全球购物
Java语言的优势
2015/01/10 面试题
高中语文教学反思
2014/01/16 职场文书
婚礼司仪主持词
2014/03/14 职场文书
结婚保证书
2015/01/16 职场文书
2015年绩效考核工作总结
2015/05/23 职场文书
Python3.8官网文档之类的基础语法阅读
2021/09/04 Python
8个JS的reduce使用实例和reduce操作方式
2021/10/05 Javascript
Redis 哨兵机制及配置实现
2022/03/25 Redis
mysql sock文件存储了什么信息
2022/07/15 MySQL