Python自动切换wifi

前言

最近在打游戏的时候经常会遇到断网的情况,每次都需要切出去切换wifi,很烦人,所以就写了个用Python自动切换可用的wifi来减少困扰。

几个系统命令

这次我们是使用python中的os模块来模拟命令行来执行命令切换wifi,所以在写程序之前,可以先了解一下几个命令。

查看当前wifi:netsh wlan show interfaces

查看所有wifi:netsh wlan show profiles

连接wifi:netsh wlan connect name="wifi名称"

思路

这次我们写的程序的主要思路如下:

1.获取当前wifi
2.测试当前wifi能否ping通百度
3.如果能ping通则等待5s后继续测试
4.如果ping不通则在能够连接的wifi中随机选择一个来连接

代码

获取当前wifi
import os
import subprocess

def get_current_wifi():
    cmd = 'netsh wlan show interfaces'
    p = subprocess.Popen(cmd,
                        stdin=subprocess.PIPE,
                        stdout=subprocess.PIPE,
                        stderr=subprocess.PIPE,
                        shell=True)
    ret = p.stdout.read()
    index = ret.find("SSID")
    if index > 0:
        return ret[index:].split(':')[1].split('\r\n')[0].strip()
    else:
        return None

这里我们使用subprocess.Popen函数来模拟执行命令行命令,并通过read()方法得到命令行的结果,接着对结果进行分析可以得到当前的wifi。

测试能否ping通
def check_ping(ip, count=1, timeout=1000):
    cmd = 'ping -n %d -w %d %s > NUL' % (count, timeout, ip)
    res = os.system(cmd)
    return 'ok' if res == 0 else 'failed'

这里我们首先构建了一个cmd命令来ping我们自己传递过来的ip地址,然后使用os.system()函数执行该命令,如果返回值为0则ping通,否则失败。

自动切换wifi
import random

def auto_switch_wifi(wifiList):
    wifi = random.choice(wifiList)
    cmd = 'netsh wlan connect name={}".format(wifi)
    res = os.system(cmd)
    return 'ok' if res == 0 else 'failed'

在auto_switch_wifi()函数中,我们接收一个可用的wifi列表,然后再列表中随机选择一个wifi进行切换,如果成功则返回ok。

到这里我们的几大基本模块已经写完了,下面上完整代码。

# _*_ coding:utf-8 _*_
import os
import time
import subprocess
import random


def check_ping(ip, count=1, timeout=1000):
    cmd = 'ping -n %d -w %d %s > NUL' % (count, timeout, ip)
    # 通过os.system()方法执行命令
    response = os.system(cmd)
    return 'ok' if response == 0 else 'failed'


def get_current_wifi():
    cmd = 'netsh wlan show interfaces'
    p = subprocess.Popen(cmd,
                         stdin=subprocess.PIPE,
                         stdout=subprocess.PIPE,
                         stderr=subprocess.PIPE,
                         shell=True)
    ret = p.stdout.read()
    index = ret.find('SSID')
    if index > 0:
        return ret[index:].split(':')[1].split('\r\n')[0].strip()


def auto_switch_wifi(wifiList):
    wifi = random.choice(wifiList)
    cmd = 'netsh wlan connect name="%s"' % wifi
    res = os.system(cmd)
    return 'ok' if res == 0 else 'failed'



def main():
    # 百度ip
    ipTest = '61.135.169.121'
    # 可以切换的wifi
    wifiList = ['HUAWEI-5DD8']
    while True:
        current_wifi = get_current_wifi()
        print "当前的wifi为:", current_wifi
        if check_ping(ipTest, 2) != 'ok':
            print "联网失败,正在切换wifi"
            if auto_switch_wifi(wifiList) == 'ok':
                print "切换成功"
                print "-" * 40
            else:
                continue
            time.sleep(5)
        else:
            print "可以成功联网"
            print '-' * 40
            time.sleep(5)


if __name__ == "__main__":
    main()

总结

人生苦短,我用python!代码还有可以完善的地方,如果想要扩展更多功能的童鞋可以自己探索哈!

  • 5
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
不知道各位有没有这样的经历,一个地方的wifi信号比较多,但是有强有弱,手机往往是自动连接的,可能不是最适合自己的那个信号,所以需要自己手动选择较强一点的,而当自己稍微走到不远的另一个地方时该手动选择的又变弱了(问题是还不是弱到连接不到),而恰恰旁边就有一个比较强的信号,所以你想用还需要手动选择一下,如此若是来来回回总是要手动选择很少麻烦 这个软件就是有这样一个功能,自动跳到信号比较强的上面去,省去了诸多麻烦 PS:附上软件说明 wiFi自动切换Wifi Jumper)是一款能够自动根据无线信号强度切换网络的WiFi辅助工具,可以在SSID相同的AP环境下,智能切换到信号最强的无线网络,也可以根据无线基站来创建特定环境的连接方式,例如设置了A区域自动切换无线网络的话,那就仅在A区域自动切换,离开了信号覆盖范围后就自动停止连接,非常智能。同时也可以设置飞行模式计划任务,在指定开始和结束时间内启用飞行模式来启用/停用无线网络。 功能说明: - 支持按下启动/停止按钮可激活或停用WiFi自动切换 - 支持基于目前的无线基站来创建新的 WiFi 区域 - 支持设备开机后自动启动WiFi自动切换 - 支持选择扫描全新/更强接入点时的延迟时间 - 支持自动连接到覆盖范围内的不安全网络 - 支持选择在状态栏上显示的图标样式 - 支持设备处于闲置状态也保持激活WiFi无线连接 - 支持在飞行模式计划中启用了飞行模式也保持WiFi Wifi Jumper v1.6.2 更新日志: - 修复部分设备不显示Wifi自动切换启用关闭按钮的bug 小编点评: 自动Wifi切换这款软件的网络阀值设定非常贴心,完全不用担心下载中断的问题。对于无线网络不是很稳定的机友们应该算得上是一款小神器。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值