You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python 3脚本执行Windows 10下的ipconfig系列命令?

用Python 3解决Windows 10 WiFi问题:自动执行网络重置命令

嘿,我太懂频繁碰到WiFi问题的糟心了!正好我之前也用Python写过类似的脚本,下面就给你详细讲讲怎么实现自动执行ipconfig /flushdns、ipconfig /release和ipconfig /renew这几个命令,还会对比os和subprocess两个模块的用法,帮你选最适合的方式。

推荐方案:使用subprocess模块

subprocess是Python官方推荐用来替代旧的os.system的模块,它更安全、灵活,能让你捕获命令的输出和错误信息,方便排查问题。

下面是完整的脚本示例:

import subprocess
import sys
import ctypes

def is_admin():
    """检查当前脚本是否以管理员身份运行"""
    try:
        return ctypes.windll.shell32.IsUserAnAdmin()
    except:
        return False

def reset_network():
    # 定义要执行的命令列表
    commands = [
        'ipconfig /flushdns',
        'ipconfig /release',
        'ipconfig /renew'
    ]
    
    for cmd in commands:
        try:
            # 执行命令并捕获输出
            result = subprocess.run(
                cmd,
                shell=True,  # 因为要执行cmd命令,需要开启shell
                check=True,  # 命令执行失败时抛出异常
                stdout=subprocess.PIPE,  # 捕获标准输出
                stderr=subprocess.PIPE,  # 捕获错误输出
                text=True  # 让输出以字符串形式返回,而非字节
            )
            print(f"✅ 执行命令 `{cmd}` 成功:\n{result.stdout}\n")
        except subprocess.CalledProcessError as e:
            print(f"❌ 执行命令 `{cmd}` 失败:\n{e.stderr}")
            sys.exit(1)

if __name__ == "__main__":
    # 检查是否为管理员,不是则重新请求权限
    if not is_admin():
        ctypes.windll.shell32.ShellExecuteW(
            None,
            "runas",
            sys.executable,
            " ".join(sys.argv),
            None,
            1
        )
        sys.exit()
    
    # 执行网络重置
    reset_network()
    print("🎉 所有网络重置命令执行完成!")

关键说明:

  • 管理员权限:这几个命令必须以管理员身份运行才能生效,脚本里的is_admin函数会自动检查权限,如果不是管理员,会弹出UAC提示请求权限,非常省心。
  • subprocess.run参数:shell=True允许执行系统命令;check=True会在命令返回非0状态码时抛出异常,方便我们捕获错误;stdout和stderr用来捕获命令的输出内容,方便调试。

备选方案:使用os模块

如果你只需要简单执行命令,不需要捕获输出,os.system会更简洁,但它的灵活性较差,无法获取命令的详细输出信息。

示例脚本:

import os
import sys
import ctypes

def is_admin():
    try:
        return ctypes.windll.shell32.IsUserAnAdmin()
    except:
        return False

def reset_network():
    commands = [
        'ipconfig /flushdns',
        'ipconfig /release',
        'ipconfig /renew'
    ]
    
    for cmd in commands:
        exit_code = os.system(cmd)
        if exit_code != 0:
            print(f"❌ 命令 `{cmd}` 执行失败,退出码: {exit_code}")
            sys.exit(1)
        else:
            print(f"✅ 命令 `{cmd}` 执行成功")

if __name__ == "__main__":
    if not is_admin():
        ctypes.windll.shell32.ShellExecuteW(
            None,
            "runas",
            sys.executable,
            " ".join(sys.argv),
            None,
            1
        )
        sys.exit()
    
    reset_network()
    print("🎉 所有网络重置命令执行完成!")

对比总结:

  • 如果你需要捕获命令输出、处理错误或更精细的控制,优先用subprocess模块。
  • 如果你只是想快速执行命令,不需要额外处理,os.system足够简单。

内容的提问来源于stack exchange,提问作者Shaddox27

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 03:59:29