任务和背景:
要创建,回读,删除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]
答案 0 :(得分:1)
这篇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
输出。