Windows Server部署Flask应用遇网络路径找不到错误及多反斜杠问题
Flask部署Windows Server后无法访问网络文件夹问题
问题描述
在Windows Server上部署Flask应用,本地测试正常,但部署后无法访问目标网络文件夹:
- 路径定义:
mainpath = '//part1//part2/part3/folder' - 测试代码:
os.listdir(mainpath) - 报错信息:
FileNotFoundError: [WinError 53] The network path was not found: '\\\\part1\\part2\\part3\\folder'
已尝试os.path.normpath、os.path.abspath、Path、PureWindowsPath、多种斜杠/反斜杠组合、os.path.join、原始字符串等30余种方式,均未解决。
为什么路径里出现大量反斜杠?
这是Python字符串打印时的转义显示,并非实际路径问题。Windows用反斜杠\作为路径分隔符,而Python里反斜杠需要转义成\\,所以报错信息里的\\\\实际对应网络共享路径的\\前缀,\\part1\\part2...才是实际传递给系统的路径——这个显示问题不是导致报错的核心原因。
解决方案
1. 检查Flask运行账户的权限
Windows网络共享的访问权限完全绑定到运行Flask的账户:
- 若用IIS部署:默认使用
IUSR或ApplicationPoolIdentity账户,这类账户默认无网络共享访问权限。需给目标共享文件夹添加该账户的读写权限,或把应用池身份切换为有访问权限的域账户/本地管理员账户。 - 若用
flask run或自启动脚本运行:先手动用相同账户登录服务器,尝试打开\\part1\part2\part3\folder,确认无需输入密码即可访问——如果手动都打不开,代码肯定也访问不了。
2. 标准化网络路径格式
直接使用Windows标准UNC路径,推荐用原始字符串避免转义干扰:
mainpath = r'\\part1\part2\part3\folder'
或用os.path模块构建路径,确保格式兼容:
import os mainpath = os.path.join('\\\\part1', 'part2', 'part3', 'folder')
3. 排查网络与共享配置
- 确认服务器能ping通
part1主机,网络链路无故障; - 检查目标文件夹的共享权限和NTFS权限,确保Flask运行账户同时拥有两种权限;
- 跨服务器场景下,确认双方防火墙、组策略未阻止SMB(网络共享)协议的访问。
4. 映射网络驱动器(备选方案)
若直接用UNC路径始终失败,可尝试将网络共享映射为本地驱动器:
import subprocess # 先执行映射命令(需运行账户有权限,注意密码安全) subprocess.run(r'net use Z: \\part1\part2\part3\folder /user:domain\username your_password /persistent:yes', shell=True) # 访问映射后的驱动器路径 mainpath = 'Z:\\folder' os.listdir(mainpath)
内容的提问来源于stack exchange,提问作者IoaTzimas
相关产品推荐
相关产品推荐

