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

Windows11下Python3.12处理Symlink返回异常结果求助

Windows下Python识别快捷方式(Symlink)的问题

在搭载Python 3.12.9的Windows 11笔记本上,使用os.scandir和os.stat处理Windows快捷方式(symlink)时得到意外结果。我希望不通过比较文件扩展名(如os.path.splitext(entry)[1] == ".lnk")来判断os.scandir、os.listdir、os.stat等返回的条目是否为symlink。

本地C盘下的测试文件夹结构如下:

\test\
   pic.jpg
   pic.jpg - Shortcut.lnk
   dir\

包含一张图片文件、指向该图片的快捷方式(symlink)以及一个子文件夹。

使用以下测试代码:

import os
import stat

p = r"C:\test"
fs = False
print("follow_symlinks=",fs)
for e in os.scandir(p):
    s = os.stat(e.path,follow_symlinks=fs)
    m = s.st_mode
    print(e.name, "win",s.st_file_attributes, "mode",m)
    print("   file",e.is_file(follow_symlinks=fs),", dir",e.is_dir(follow_symlinks=fs))
    print("   sym",e.is_symlink(),",junct",e.is_junction())
    print("   ssym",stat.S_ISLNK(m),",sfile",stat.S_ISREG(m),",sdir",stat.S_ISDIR(m))

得到如下输出:

follow_symlinks= False
dir win 16 mode 16895
   file False , dir True
   sym False ,junct False
   ssym False ,sfile False ,sdir True
pic.jpg win 32 mode 33206
   file True , dir False
   sym False ,junct False
   ssym False ,sfile True ,sdir False
pic.jpg - Shortcut.lnk win 32 mode 33206
   file True , dir False
   sym False ,junct False
   ssym False ,sfile True ,sdir False

将follow_symlinks设置为True后,输出完全相同。

由于未跟随symlink,我预期"pic.jpg - Shortcut.lnk"的结果为:
file False, sym True, junct True, ssym True sfile False

请问用于判断条目是否为symlink的测试代码是否正确?

我参考了Python stat模块文档以及Windows文件属性常量文档。mode 16895是目录模式(16384)加上权限,mode 33206是常规文件模式(32768)加上权限;Windows属性16为FILE_ATTRIBUTE_DIRECTORY,属性32为FILE_ATTRIBUTE_ARCHIVE,按位与2、4或128也可接受。

内容的提问来源于stack exchange,提问作者at2010

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 12:17:34