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中的赋值、浅拷贝、深拷贝介绍
Mar 09 Python
Django开发中复选框用法示例
Mar 20 Python
python中字符串的操作方法大全
Jun 03 Python
Python列表生成式与生成器操作示例
Aug 01 Python
Python判断telnet通不通的实例
Jan 26 Python
python制作简单五子棋游戏
Jun 18 Python
Python3之不使用第三方变量,实现交换两个变量的值
Jun 26 Python
利用python读取YUV文件 转RGB 8bit/10bit通用
Dec 09 Python
Pytorch 之修改Tensor部分值方式
Dec 27 Python
Python 统计位数为偶数的数字代码详解
Mar 15 Python
OpenCV4.1.0+VS2017环境配置的方法步骤
Jul 09 Python
pytorch实现手写数字图片识别
May 20 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取得字符串首字母的方法
2015/03/25 PHP
PHP记录和读取JSON格式日志文件
2016/07/07 PHP
PHP+JQuery+Ajax实现分页方法详解
2016/08/06 PHP
PHP正则验证字符串是否为数字的两种方法并附常用正则
2019/02/27 PHP
laravel-admin解决表单select联动时,编辑默认没选上的问题
2019/09/30 PHP
滚动条变色 隐藏滚动条与双击网页自动滚屏显示代码
2009/12/28 Javascript
javascript 内存回收机制理解
2011/01/17 Javascript
js+css使DIV始终居于屏幕中间 左下 左上 右上 右下的代码集合
2011/03/10 Javascript
Javascript学习笔记 delete运算符
2011/09/13 Javascript
js实现飞入星星特效代码
2014/10/17 Javascript
jquery操作angularjs对象
2015/06/26 Javascript
jQuery绑定事件on()与弹窗的简要概述
2016/04/27 Javascript
总结jQuery插件开发中的一些要点
2016/05/16 Javascript
jQuery实现可以编辑的表格实例详解【附demo源码下载】
2016/07/09 Javascript
AngularJS 单元测试(二)详解
2016/09/21 Javascript
jquery精度计算代码 jquery指定精确小数位
2017/02/06 Javascript
深入理解Node module模块
2018/03/26 Javascript
微信小程序封装自定义弹窗的实现代码
2019/05/08 Javascript
a标签调用js的方法总结
2019/09/05 Javascript
Python socket.error: [Errno 98] Address already in use的原因和解决方法
2014/08/25 Python
Python中的ctime()方法使用教程
2015/05/22 Python
Python内置模块ConfigParser实现配置读写功能的方法
2018/02/12 Python
Python实现简单查找最长子串功能示例
2019/02/26 Python
python字典的setdefault的巧妙用法
2019/08/07 Python
python定时截屏实现
2020/11/02 Python
matplotlib之多边形选区(PolygonSelector)的使用
2021/02/24 Python
经典c++面试题二
2015/08/14 面试题
计算机应届毕业生自荐信范文
2014/02/23 职场文书
幼儿园小班教师寄语
2014/04/03 职场文书
珍惜资源的建议书
2014/08/26 职场文书
中考学习决心书
2015/02/04 职场文书
2015年度对口支援工作总结
2015/07/22 职场文书
100句人生哲理语录集锦:强者征服今天,懒汉坐等明天
2019/10/18 职场文书
python中pandas对多列进行分组统计的实现
2021/06/18 Python
详细了解MVC+proxy
2021/07/09 Java/Android
python自动获取微信公众号最新文章的实现代码
2022/07/15 Python