在python中如何判断一个目录是否是windows连接

2024-10-01 04:59:24 发布

您现在位置:Python中文网/ 问答频道 /正文

我在"C:\Users\confusedDev\Documents"上运行os.walk(),我看到["My Music", "My Pictures"...]作为子目录返回,但它们实际上没有被访问。经过一番研究,我发现它们实际上是junctions在Windows中。在

我的理解是junction是一个指向目录的符号链接,在os.walk()期间默认忽略它,但是下面的测试失败了

>>> os.path.islink("C:\\Users\\confusedDev\\Documents\\My Pictures")
False

嗯,os.walk()怎么知道“C:\Users\confusedDev\Documents\My Pictures”是“C:\Users\confusedDev\Pictures”的符号链接,需要跳过?我想调用相同的api…目前,我的解决方案逻辑只是假设如果一个目录被os.walk()跳过,它就是一个连接


Tags: 目录os链接mywindowsmusic符号users
2条回答

使用python3.5islinkjunction links返回false。似乎python3.5本机不支持连接链接,但是可以使用ctypes或外部库添加对连接链接的支持:

  1. 使用ntfs的外部模块:https://github.com/Juntalis/ntfslink-python/tree/master/ntfslink

  2. 在pywin32中使用win32模块:http://docs.activestate.com/activepython/2.5/pywin32/win32file__CreateSymbolicLink_meth.html

  3. 直接调用DLL:https://stackoverflow.com/a/1143276/4752883

这些都是更复杂的解决方案。此外,如果您使用junction links,它们将无法在以前的windows版本或其他操作系统上运行。在

TL;DR要使其可移植,最好使用mklink /D而不是{}将junction links转换为{}。symbolic linksos.walk和{}识别。在

我要使用的另一种方法是子进程。只需调用提供有关windows中链接信息的外部windows程序,如果链接存在,则返回0作为返回代码,如果不存在或不是链接,则返回其他:

fsutil reparsepoint query "<PathToTest>"

例如:

^{pr2}$

在Windows10上,正常用户可以正常工作(也可以创建链接),但对于Windows7,您需要管理员权限。对我来说不是问题,因为我的应用程序会检查链接以创建一个新的链接,所以它无论如何都需要Windows7上的管理员权限。在

你好!在

相关问题 更多 >