在win32中读取符号链接/连接点的目标(通过Python)

时间:2011-03-23 07:51:29

标签: python windows symlink

任务和背景:
要创建,回读,删除win32平台中目录(截至目前)的链接 我的python代码中遵循的方法是按顺序         一个。尝试创建真正的符号链接,如果支持(通过mklink cmd)
        湾如果不受支持,则回退到创建联结点pt,如果它受支持(通过链接cmd)
阅读和删除遵循相同的方法。

问题:
创建和删除symlink和junc pt很简单,但我无法弄清楚如何读取目标,即指向目录。

进度:
一个。对于交接点,我可以使用'linkd'并以丑陋的方式解析stdout以获得目标目录。
湾对于符号链接,似乎没有这样的解决方案 C。我看到在win32符号链接的python 3.1.1 [1]中有原生支持,但我使用的是v2.7.1,现在无法升级。 d。 pywin32模块中有一个方法来创建符号链接,但我无法看到它读回来

P.S。我是Python的新手,所以如果有另一种方法可以轻松实现这一点,请告诉我。

[1] [http://bugs.python.org/issue1578269] [1]

3 个答案:

答案 0 :(得分:1)

关于reparse points

这篇Code Project文章应该会为您提供所需的信息。你必须用ctypes或win32api将它翻译成Python。

答案 1 :(得分:0)

除了一些关于如何使用ctypes模块创建符号链接的帖子之外,您还可以找到使用win32file module here阅读符号链接的代码段。我还在Windows上编写了Python C-Extension here实现联结,符号链接和硬链接,但我应该警告你需要进行认真的改革。 (在真正阅读Python C-Extensions之前写了一遍,所以我没有真正放置适当的Py_XREF等)

还有一个只使用该存储库中某处的ctypes模块读取,编写和检查联结的实现。

答案 2 :(得分:0)

Win32file库对我来说也不起作用。但是如果你有Junction,你可以使用它(只需改变连接路径以适合你的):

def getOriginalPath(junctionPath):
    # TCPROGS - system env. variable
    cmd = subprocess.Popen('%TCPROGS%\Junction\junction.exe '+junctionPath, shell=True, stdout=subprocess.PIPE)
    for line in cmd.stdout:
        if line.find('Substitute Name:') >= 0:
            start = line.find(':')
            return line[start+1:].strip()
            break

如果您不想依赖Junction,也可以解析DIR /A:L输出。