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 相关文章推荐
数据挖掘之Apriori算法详解和Python实现代码分享
Nov 07 Python
用Python编写一个简单的俄罗斯方块游戏的教程
Apr 03 Python
python爬虫获取多页天涯帖子
Feb 23 Python
TensorFlow实现Batch Normalization
Mar 08 Python
详解关于Django中ORM数据库迁移的配置
Oct 08 Python
Python解决两个整数相除只得到整数部分的实例
Nov 10 Python
PyQt QListWidget修改列表项item的行高方法
Jun 20 Python
Python 根据数据模板创建shapefile的实现
Nov 26 Python
GitHub上值得推荐的8个python 项目
Oct 30 Python
python 如何引入协程和原理分析
Nov 30 Python
如何用 Python 子进程关闭 Excel 自动化中的弹窗
May 07 Python
Python爬取某拍短视频
Jun 11 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
第六节--访问属性和方法
2006/11/16 PHP
php file_get_contents函数轻松采集html数据
2010/04/22 PHP
基于MySQL到MongoDB简易对照表的详解
2013/06/03 PHP
使用PHPStorm+XDebug搭建单步调试环境
2017/11/19 PHP
PHP实现合并两个排序链表的方法
2018/01/19 PHP
PHP与以太坊交互详解
2018/08/24 PHP
jquery插件 cluetip 关键词注释
2010/01/12 Javascript
ie8本地图片上传预览示例代码
2014/01/12 Javascript
使用delegate方法为一个tr标签加一个链接
2014/06/27 Javascript
将JavaScript的jQuery库中表单转化为JSON对象的方法
2015/11/17 Javascript
深入理解javascript作用域第二篇之词法作用域和动态作用域
2016/07/24 Javascript
微信小程序实现图片上传、删除和预览功能的方法
2017/12/18 Javascript
JavaScript闭包原理与用法实例分析
2018/08/10 Javascript
微信小程序 可搜索的地址选择实现详解
2019/08/28 Javascript
微信小程序(订阅消息)功能
2019/10/25 Javascript
ES6 Generator基本使用方法示例
2020/06/06 Javascript
javascript实现前端成语点击验证
2020/06/24 Javascript
[01:24]2014DOTA2 TI第二日 YYF表示这届谁赢都有可能
2014/07/11 DOTA
简单的Python抓taobao图片爬虫
2014/10/26 Python
python optparse模块使用实例
2015/04/09 Python
Python使用re模块正则提取字符串中括号内的内容示例
2018/06/01 Python
python爬取足球直播吧五大联赛积分榜
2018/06/13 Python
python微信聊天机器人改进版(定时或触发抓取天气预报、励志语录等,向好友推送)
2019/04/25 Python
django 基于中间件实现限制ip频繁访问过程详解
2019/07/30 Python
Python递归求出列表(包括列表中的子列表)的最大值实例
2020/02/27 Python
Python手动或自动协程操作方法解析
2020/06/22 Python
python3爬虫中异步协程的用法
2020/07/10 Python
python获取时间戳的实现示例(10位和13位)
2020/09/23 Python
New Balance天猫官方旗舰店:始于1906年,百年慢跑品牌
2017/11/15 全球购物
纪伊国屋泰国网上书店:Kinokuniya泰国
2017/12/24 全球购物
Java语言程序设计测试题判断题部分
2013/01/06 面试题
护士自我鉴定范文
2013/10/06 职场文书
小学见习报告
2014/10/31 职场文书
小学生作文评语集锦
2014/12/25 职场文书
2015年复活节活动总结
2015/02/27 职场文书
centos7安装mysql5.7经验记录
2022/05/02 Servers