在没有Pywin32的Python中检测Vista/7上的符号链接(mklink)

Kyl*_*ane 4 python windows pywin32 windows-vista

目前,buildout recipe collective.recipe.omelette在所有版本的Windows上使用junction.exe来创建符号链接.但是,默认情况下,junction.exe不附带Windows,最重要的是不支持为文件(仅限目录)创建符号链接,导致相当多的Python包出现问题.

在NT6 +(Vista和7)上,现在有一个mklink实用程序,它不仅默认出现,而且还能够为文件和目录创建符号链接.我想更新collective.recipe.omelette以使用它(如果可用)并且已经这样做了,除了一个简单的功能; 检测文件或文件夹是否实际上是符号链接.由于这是一个小的构建配方,在我看来需要Pywin32有点太多了(除非setuptools可以某种方式只在Windows上下载它?).

目前在Windows上,煎蛋的功能是调用文件夹上的junction.exe,然后grep响应"替换名称:"但我找不到任何简单的mklink.

我能想到的唯一方法是在目录中调用"dir",然后逐行查看"<SYMLINK>"和同一行的文件夹/文件名.当然有更好的东西?

Jas*_*mbs 5

有关没有pywin32的Windows中符号链接操作的大量示例,请参阅jaraco.windows.filesystem(jaraco.windows包的一部分).


Ale*_*lli 3

您可以使用它ctypes来访问各种所需的功能和结构吗? 这个补丁目前正在讨论中,旨在os为 Vista 和 Windows 7 下的模块添加符号链接功能 - 但它不会出现在 Python 2.7 和 3.2 之前,所以需要等待(以及需要最新版本)最终到来)可能会太长;基于 ctypes 的解决方案ctypes可能会让您渡过难关,补丁中的代码显示了在 C 中需要做什么(并且在 Python 中基于 ctypes 的编程只比在 C 中进行相同的编程难一点)。

除非有人已经为此目的发布了一些其他独立的实用程序junction.exe,否则除了使用 ctypes、Pywin32 或 之外,我看不到其他可行的方法(直到该补丁最终将其纳入未来的 Python 的 stdlib),dir并且您已经确定了这三个选项中的最后两个......!-)