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

如何通过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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.23 14:52:35