1-Python - 制作一键重启指定网卡脚本
before
win10 + Python3.6.8
最近,我遇到了麻烦,我的VMnet8网卡出现了问题,大致情况如下:
- 我在Linux虚拟机中设置了静态IP,然后可以和外部进行通信。
- 但电脑在休眠后,再唤醒的话,Xhell每次都要手动找到网络适配器中,将VMWnet8这块网卡手动禁用再启用才能连接上。
但每次都手动的打开网络适配器,比较麻烦,我就想着写个Python脚本来减轻一些流程。
实现思路是:
- 查询到启动和关闭网卡的dos命令。
- Python脚本中执行dos命令。
困难:
- 原来的VMnet8这块网卡的名字太长(估计是空格引起的),dos命令无法执行,所以,我先将网卡名字改为VMnet8,然后手动的在终端中确认dos执行都没问题。
- 问题来了,这两个命令需要管理员权限才能执行,但Python脚本无法默认以普通用户执行,所以这个问题需要解决。
实现代码
import ctypes
import sys
import subprocess
import psutil
disabled = "netsh interface set interface VMnet8 disabled"
enabled = "netsh interface set interface VMnet8 enabled"
def is_admin():
try:
return ctypes.windll.shell32.IsUserAnAdmin()
except:
return False
if is_admin():
# 这里写入需要管理员权限执行的操作
if psutil.net_if_stats()['VMnet8'].isup: # 如果网卡是开启的,就先关闭它
subprocess.run(disabled, shell=True, stdout=subprocess.PIPE)
subprocess.run(enabled, shell=True, stdout=subprocess.PIPE)
else:
if sys.version_info[0] == 3:
ctypes.windll.shell32.ShellExecuteW(None, "runas", sys.executable, __file__, None, 1)
现在,这个运行都没问题,也能解决我的问题了。
优化,每次都要手动的调用Python解释器执行脚本,也太麻烦,我就使用pyinstaller将脚本打包成exe文件,手动双击就完了:
pyinstaller -F VMnet8.py
然后,我将生成的exe文件,找了个地方保存,完事为这个exe文件再生成一个快捷方式,每次网卡不好使,直接双击就完事了。
未来....可以将exe文件搞成开启自启动,但我这边没做,因为开机后,我的网卡也是新启动的,不存在问题。而之所以存在问题,则是我不怎么关机,每次下班,息屏走人....然后再用的时候才需要手动的禁用再启用网卡。
that's all,see also:
利用python获取windows管理员权限执行代码 | Windows 下通过命令行启用、禁用网卡
欢迎斧正,that's all