Python使用subprocess.call带变量执行net use映射网络驱动器失败求助
问题解决方案
核心问题原因
os.makedirs配置错误:指定的0o222权限在SMB共享场景下不生效,且未添加exist_ok=True参数,若目标文件夹已存在会直接抛出异常,导致后续映射代码终止执行。- 命令参数传递错误:使用字符串拼接+
shell=True的方式调用subprocess,当路径包含空格、特殊字符时,CMD会错误拆分参数,即便打印结果看起来正确,实际执行时路径也无法被正确识别。 - 字符串转义异常:手动写的原始字符串(
r开头)会保留反斜杠,但拼接生成的mapdrive不属于原始字符串,内部反斜杠可能被二次转义,导致网络路径开头的双反斜杠被识别为单反斜杠,路径失效。
修正后代码
import os import subprocess import time # 基础配置 shared_root = r'\\10.38.10.22\04.Simon' target_drive = 'z:' # name为提前录入的学生信息变量 name = "预填的学生姓名" # 生成学生文件夹绝对路径 student_folder = os.path.join(shared_root, name) # 创建文件夹,已存在则直接跳过 os.makedirs(student_folder, exist_ok=True) # 先删除已存在的盘符映射 subprocess.run( ['net', 'use', target_drive, '/del', '/Y'], capture_output=True, text=True ) time.sleep(1) # 执行新的映射,列表传参彻底避免转义和空格问题 run_result = subprocess.run( ['net', 'use', target_drive, student_folder], capture_output=True, text=True ) # 排查时可打开下方注释查看执行详情 # print("返回码:", run_result.returncode) # print("错误信息:", run_result.stderr)
补充说明
如果执行后仍映射失败,可打开代码末尾的打印注释,根据返回的错误信息定位具体问题,常见的错误原因包括共享盘权限不足、盘符被其他进程占用、学生姓名包含特殊字符未被系统支持等。
内容的提问来源于stack exchange,提问作者Simon Barnes
相关产品推荐
相关产品推荐

