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
posted @ 2019-03-31 14:06  听雨危楼  阅读(1359)  评论(0编辑  收藏  举报