无法通过netsh读取IPv6地址,脚本读取功能异常求助
解决删除手动IP后
netsh ipv6 show address缓存权限报错问题 问题分析
报错提示Unable to move the cache: Access is denied. (0x5),本质是执行netsh命令的进程没有足够权限访问系统网络缓存目录——要么是脚本未以管理员权限运行,要么是删除IP操作导致缓存目录权限异常。
修复方案
强制以管理员权限运行脚本
Windows下修改/读取网络配置的netsh命令必须用管理员权限执行。可以在脚本开头加入自动提权代码:import ctypes, sys def is_admin(): try: return ctypes.windll.shell32.IsUserAnAdmin() except: return False if not is_admin(): ctypes.windll.shell32.ShellExecuteW(None, "runas", sys.executable, __file__, None, 1) sys.exit()也可以右键终端或脚本,选择「以管理员身份运行」后再执行命令。
重置网络缓存与权限
打开管理员命令提示符,执行以下命令重置网络组件:netsh winsock reset netsh int ip reset执行完成后重启电脑,再尝试读取IP地址。
优化命令执行方式
替换subprocess.getoutput为subprocess.check_output,捕获输出同时避免潜在的缓存依赖问题:import subprocess try: output = subprocess.check_output( ['netsh', 'interface', 'ipv6', 'show', 'address', 'LocalNetwork'], stderr=subprocess.STDOUT, text=True ) print(output) except subprocess.CalledProcessError as e: print(f"命令执行失败: {e.output}")验证适配器名称准确性
先执行netsh interface ipv6 show interfaces确认你的以太网适配器准确名称,避免因名称拼写错误触发隐性权限报错。
内容的提问来源于stack exchange,提问作者Bogdan R
相关产品推荐
相关产品推荐

