![2ded7e61d409068740a5b2afd90a03a5.png](https://img-blog.csdnimg.cn/img_convert/2ded7e61d409068740a5b2afd90a03a5.png)
前言
公司里装了两条不同的宽带,根据使用的情况,比如拨VPN,或者使用人数过多,网速不行了就要切换下。每次手动去切换很不方便,而且网速也很难判断。这里分享下如何用Python检测网速,然后自动切换网关。
使用speedtest-cli测试网速
相信很多人都用过http://speedtest.net来测试网络速度,speedtest-cli是一个Python开源项目。通过链接speedtest.net来检测上传速度和下载速度。
安装
pip install speedtest-cli
或者
easy_install speedtest-cli
测试网速
安装之后就可以通过命令行来测试下网速:
speedtest-cli --bytes
![d6e6e21e9f99fb426f77a2ba6174fa5d.png](https://img-blog.csdnimg.cn/img_convert/d6e6e21e9f99fb426f77a2ba6174fa5d.png)
根据log我们大概可以推测下这个程序的工作步骤:
从http://speedtest.net读取配置文件。
获得一个server列表。
找到最近的server作为最优选择用来测试速度。
这种最优方式适合检测网络的最大下载速度。而我现在需要的是根据网络访问速度切换网关,比如我需要经常访问国外某个网站,这个最大下载速度就没有意义了。要检测速度,我可以随意设置一些这个网站上的图片资源作为测试数据,而并不需要使用http://speedtest.net。
自定义函数用于检测网速
通过学习源码,我们可以自己重写一个网速测试函数。找到{Python Installation Directory}Libsite-packagesspeedtest_cli.py根据speedtest()创建的函数很简单:
def
原始代码是先找到最佳服务器,然后从上面获取URL资源。这里只需要随便设置我需要的资源:
urls
看看源码中的下载速度是如何计算的?
def
- 在线程中读取读取图片资源。
- 把线程放入阻塞的队列中。
- 从队列中把线程的结果一个个读取出来。
- speed = total file sizes / total time cost
学习从来不是一个人的事情,要有个相互监督的伙伴,工作需要学习python或者有兴趣学习python的伙伴可以私信回复小编“学习”或者评论,留言,点赞 领取全套免费python学习资料、视频()装包
![720e24aade070f451c64420dabaf0601.png](https://img-blog.csdnimg.cn/img_convert/720e24aade070f451c64420dabaf0601.png)
查询网络适配器设置,并设置网关
如何用Python设置网关?在StackOverflow上可以找到解答。推荐的方法是使用WMI (Windows Management Instrumentation)。
安装
WMI
Python for Windows Extensions
Win32网络适配器设置
很多人的电脑上会看到很多的网络适配器,比如无线网卡的,虚拟网卡的,以太网卡的等等。每个适配器都有很多属性,看下微软的定义Win32_NetworkAdapterConfiguration class::
[
找到了某个特定属性所对应的值,我们就可以很容易找到目标适配器了。我是这样查找的:
- 右键目标网络适配器。
- 选择配置。
- 点击详细。
- 看一下属性列表及对应的值。
最后选择了设备描述Realtek PCIe GBE Family Controller。
![95b953deb419b0305652545a4c84e1e9.png](https://img-blog.csdnimg.cn/img_convert/95b953deb419b0305652545a4c84e1e9.png)
用Python查询Windows IP和网关
wmiObj
设置Windows网关
configurations
请注意脚本必须用管理员权限来执行,不然设置会失败。记得查看返回值。
for gateway in gateways:
把Python脚本转换成可执行EXE
如何把Python程序分发给别人使用如果他们并没有安装Python程序以及依赖库?使用Py2exe 可以很容易把Python脚本转换成exe文件。
安装
Py2exe
转换Python脚本
新建setup.py:
from
执行下面的命令:
python
目录中会生成一个dist 文件夹:
![317aa81df9eab68a25cd2987b6e9ac6d.png](https://img-blog.csdnimg.cn/img_convert/317aa81df9eab68a25cd2987b6e9ac6d.png)
记得执行程序的时候必须要用管理员权限