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 相关文章推荐
Python提示[Errno 32]Broken pipe导致线程crash错误解决方法
Nov 19 Python
用Python编写web API的教程
Apr 30 Python
浅谈pyhton学习中出现的各种问题(新手必看)
May 17 Python
动态规划之矩阵连乘问题Python实现方法
Nov 27 Python
django请求返回不同的类型图片json,xml,html的实例
May 22 Python
对python 操作solr索引数据的实例详解
Dec 07 Python
Python生成器的使用方法和示例代码
Mar 04 Python
Python GUI自动化实现绕过验证码登录
Jan 10 Python
Python编程快速上手——选择性拷贝操作案例分析
Feb 28 Python
对Matlab中共轭、转置和共轭装置的区别说明
May 11 Python
教你如何用Python实现人脸识别(含源代码)
Jun 23 Python
Python GUI编程之tkinter 关于 ttkbootstrap 的使用详解
Mar 03 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会话(Session)实现用户登陆功能
2013/06/29 PHP
thinkPHP基于ajax实现的菜单与分页示例
2016/07/12 PHP
Javascript实例教程(19) 使用HoTMetal(1)
2006/12/23 Javascript
JavaScript脚本性能优化注意事项
2008/11/18 Javascript
一个选择最快的服务器转向代码
2009/04/27 Javascript
javascript针对DOM的应用实例(一)
2012/04/15 Javascript
P3P Header解决Cookie跨域的问题
2013/03/12 Javascript
使用JavaScript实现Java的List功能(实例讲解)
2013/11/07 Javascript
JavaScript 实现鼠标拖动元素实例代码
2014/02/24 Javascript
详解JavaScript的变量和数据类型
2015/11/27 Javascript
Bootstrap Paginator分页插件与ajax相结合实现动态无刷新分页效果
2016/05/27 Javascript
Bootstrap开发实战之第一次接触Bootstrap
2016/06/02 Javascript
Javascript6中字符串的四个新用法分享
2016/09/11 Javascript
Javascript实现汉字和拼音互转的终极方案
2016/10/19 Javascript
详解利用jsx写vue组件的方法示例
2017/07/17 Javascript
[49:59]KG vs Mineski 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/16 DOTA
python中的sort方法使用详解
2014/07/25 Python
Python中的左斜杠、右斜杠(正斜杠和反斜杠)
2016/08/30 Python
完美解决python遍历删除字典里值为空的元素报错问题
2016/09/11 Python
理解python中生成器用法
2017/12/20 Python
python2 与python3的print区别小结
2018/01/16 Python
Django中的CBV和FBV示例介绍
2018/02/25 Python
Python 实现文件打包、上传与校验的方法
2019/02/13 Python
PyQt5 窗口切换与自定义对话框的实例
2019/06/20 Python
django admin.py 外键,反向查询的实例
2019/07/26 Python
Windows下Anaconda和PyCharm的安装与使用详解
2020/04/23 Python
解决python使用list()时总是报错的问题
2020/05/05 Python
python3.7.3版本和django2.2.3版本是否可以兼容
2020/09/01 Python
Argos官网:英国家喻户晓的百货零售连锁商
2017/04/03 全球购物
如何填写个人简历自我评价
2013/12/10 职场文书
上班看电影检讨书
2014/02/12 职场文书
集团公司党的群众路线教育实践活动工作总结
2014/03/03 职场文书
幼儿园小班家长评语
2014/12/30 职场文书
公司车辆管理制度
2015/08/04 职场文书
教师个人教学反思
2016/02/23 职场文书
pytorch中的model.eval()和BN层的使用
2021/05/22 Python