如何通过Python实现本地驱动器的subst映射?
如何通过Python实现本地驱动器的subst映射?
嘿,我碰到过一模一样的问题!你卡壳的核心原因其实是权限问题——Windows下执行subst命令创建本地驱动器映射需要管理员权限,而默认运行Python脚本时是没有这个权限的,这就解释了为什么手动在管理员CMD里能成功,但Python调用就没反应或者报错。
下面给你两个实用的解决方案:
方案1:手动以管理员权限运行Python脚本
先写好执行subst的代码,推荐用subprocess模块(比os.system更可控,能捕获错误信息):
import subprocess try: # 把命令拆分成列表形式传入,避免shell注入风险 subprocess.run( ["subst", "O:", "D:\\"], check=True, # 命令执行失败时自动抛出异常 capture_output=True, text=True ) print("驱动器O: 成功映射到D:\\啦!") except subprocess.CalledProcessError as e: print(f"映射失败,错误信息:{e.stderr}")
然后右键你的Python脚本,选择以管理员身份运行;如果用VS Code、PyCharm这类IDE,也要右键IDE图标选择“以管理员身份启动”,再运行脚本。
方案2:让脚本自动请求管理员权限
不想每次手动点管理员?可以用ctypes模块实现自动弹出UAC权限请求:
import ctypes import sys import subprocess def is_admin(): try: return ctypes.windll.shell32.IsUserAnAdmin() except: return False if is_admin(): # 已经是管理员,执行映射命令 try: subprocess.run(["subst", "O:", "D:\\"], check=True) print("驱动器映射成功!") except subprocess.CalledProcessError as e: print(f"执行出错:{e}") else: # 重新以管理员身份启动当前脚本 ctypes.windll.shell32.ShellExecuteW( None, "runas", # 标记请求管理员权限 sys.executable, # 当前Python解释器路径 " ".join(sys.argv), # 传递当前脚本的参数 None, 1 # 显示命令窗口 )
运行这个脚本时,会自动弹出UAC提示框,点“是”之后就能顺利执行subst命令了。
至于你之前写bat文件用Python执行无效的原因,和上面完全一致——Python运行bat时没有管理员权限,所以bat里的subst命令没生效,但手动跑bat时如果是管理员CMD,自然就成功了。
最后提个小细节:要确保你要映射的驱动器字母(比如O:)没有被其他设备占用,不然会报错;之后要删除映射的话,执行subst O: /d命令就行。
备注:内容来源于stack exchange,提问作者Morris Olmsted
相关产品推荐
相关产品推荐

