如何用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
相关产品推荐
相关产品推荐

