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操作CouchDB数据库简单示例
Mar 10 Python
jupyter安装小结
Mar 13 Python
Python实现自动添加脚本头信息的示例代码
Sep 02 Python
python模块简介之有序字典(OrderedDict)
Dec 01 Python
Windows上使用Python增加或删除权限的方法
Apr 24 Python
django静态文件加载的方法
May 20 Python
浅析Python装饰器以及装饰器模式
May 28 Python
Python Web框架之Django框架Form组件用法详解
Aug 16 Python
opencv+python实现鼠标点击图像,输出该点的RGB和HSV值
Jun 02 Python
Python修改DBF文件指定列
Dec 19 Python
python中@contextmanager实例用法
Feb 07 Python
python函数的两种嵌套方法使用
Apr 02 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设置编码格式的方法
2013/03/05 PHP
PHP数组操作――获取数组最后一个值的方法
2015/04/14 PHP
Symfony2框架创建项目与模板设置实例详解
2016/03/17 PHP
通过PHP设置BugFree获取邮箱通知
2019/04/25 PHP
php常用字符串长度函数strlen()与mb_strlen()用法实例分析
2019/06/25 PHP
关于laravel 数据库迁移中integer类型是无法指定长度的问题
2019/10/09 PHP
javascript 写类方式之八
2009/07/05 Javascript
asp(javascript)全角半角转换代码 dbc2sbc
2009/08/06 Javascript
jquery trim() 功能源代码
2011/02/14 Javascript
Javascript继承机制的设计思想分享
2011/08/28 Javascript
基于jquery实现的定时显示与隐藏div广告的实现代码
2013/08/22 Javascript
基于Jquery实现键盘按键监听
2014/05/11 Javascript
jquery获取html元素的绝对位置和相对位置的方法
2014/06/20 Javascript
jQuery实现的感应鼠标悬停图片色彩渐显效果
2015/03/03 Javascript
js判断浏览器类型及设备(移动页面开发)
2015/07/30 Javascript
分享一个插件实现水珠自动下落效果
2016/06/01 Javascript
JS基于面向对象实现的选项卡效果示例
2016/12/20 Javascript
js放大镜放大购物图片效果
2017/01/18 Javascript
设置cookie指定时间失效(实例代码)
2017/05/28 Javascript
JavaScript之解构赋值的理解
2019/01/30 Javascript
vue自定义js图片碎片轮播图切换效果的实现代码
2019/04/28 Javascript
vue配置文件实现代理v2版本的方法
2019/06/21 Javascript
[09:31]2016国际邀请赛中国区预选赛Yao赛后采访 答题送礼
2016/06/27 DOTA
Python的Django框架中的URL配置与松耦合
2015/07/15 Python
使用Python保存网页上的图片或者保存页面为截图
2016/03/05 Python
Python 多线程搜索txt文件的内容,并写入搜到的内容(Lock)方法
2019/08/23 Python
详解python tkinter模块安装过程
2020/01/06 Python
Python生成器generator原理及用法解析
2020/07/20 Python
HTML5的结构和语义(2):结构
2008/10/17 HTML / CSS
投标保密承诺书
2014/05/19 职场文书
个人融资协议书范本两则
2014/10/15 职场文书
2014年党总支工作总结
2014/12/18 职场文书
开除员工通知
2015/04/22 职场文书
小学英语教师2015年度个人工作总结
2015/10/14 职场文书
初二物理教学反思
2016/02/19 职场文书
Redis可视化客户端小结
2021/06/10 Redis