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的Django框架代码的一些示例
Apr 20 Python
Python获取央视节目单的实现代码
Jul 25 Python
Python 中的 else详解
Apr 23 Python
python+flask实现API的方法
Nov 21 Python
pyqt5实现绘制ui,列表窗口,滚动窗口显示图片的方法
Jun 20 Python
基于Python的微信机器人开发 微信登录和获取好友列表实现解析
Aug 21 Python
浅析Python数字类型和字符串类型的内置方法
Dec 22 Python
Python unittest单元测试框架及断言方法
Apr 15 Python
基于Python绘制美观动态圆环图、饼图
Jun 03 Python
Python基于内置函数type创建新类型
Oct 22 Python
OpenCV中resize函数插值算法的实现过程(五种)
Jun 05 Python
Python matplotlib多个子图绘制整合
Apr 13 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
xajax写的留言本
2006/11/25 PHP
Smarty Foreach 使用说明
2010/03/23 PHP
解析php中var_dump,var_export,print_r三个函数的区别
2013/06/21 PHP
php校验公钥是否可用的实例方法
2019/09/17 PHP
如何让您的中波更粗更长 - 中波框形天线制作
2021/03/10 无线电
CLASS_CONFUSION JS混淆 全源码
2007/12/12 Javascript
jQuery之排序组件的深入解析
2013/06/19 Javascript
javascript一元操作符(递增、递减)使用示例
2013/08/07 Javascript
JavaScript设计模式之外观模式实例
2014/10/10 Javascript
JS+CSS实现表格高亮的方法
2015/08/05 Javascript
jQuery给元素添加样式的方法详解
2015/12/30 Javascript
JS实现的仿QQ空间图片弹出效果代码
2016/02/23 Javascript
JavaScript中点击事件的写法
2016/06/28 Javascript
js enter键激发事件实例代码
2016/08/17 Javascript
vue中将网页打印成pdf实例代码
2017/06/15 Javascript
vue resource post请求时遇到的坑
2017/10/19 Javascript
微信小程序scroll-view实现滚动穿透和阻止滚动的方法
2018/08/20 Javascript
微信小程序自定义toast弹窗效果的实现代码
2018/11/15 Javascript
用Python实现换行符转换的脚本的教程
2015/04/16 Python
深入理解Python 关于supper 的 用法和原理
2018/02/28 Python
PyQt5每天必学之拖放事件
2020/08/27 Python
获取python的list中含有重复值的index方法
2018/06/27 Python
在pycharm中设置显示行数的方法
2019/01/16 Python
对python过滤器和lambda函数的用法详解
2019/01/21 Python
Python3实现的反转单链表算法示例
2019/03/08 Python
Python 计算任意两向量之间的夹角方法
2019/07/05 Python
Python+Selenium实现自动化的环境搭建的步骤(图文)
2020/09/01 Python
python/golang实现循环链表的示例代码
2020/09/14 Python
解决CSS3 transition-delay 属性默认值0不带单位失效的问题
2020/10/29 HTML / CSS
美国农场鲜花速递:The Bouqs
2018/07/13 全球购物
意大利包包和行李箱销售网站:Bagaglio.it
2021/03/02 全球购物
机械系大学毕业生推荐信
2013/11/27 职场文书
乡镇党员干部群众路线对照检查材料思想汇报
2014/09/28 职场文书
民主生活会对照检查材料范文
2014/10/01 职场文书
MYSQL(电话号码,身份证)数据脱敏的实现
2021/05/28 MySQL
一次Mysql update sql不当引起的生产故障记录
2022/04/01 MySQL