2011-03-23 199 views
2

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

问题:
创建和删除symlink和junc pt都很简单,但我不知道如何读取目标,即指向目录。

进度:
a。对于联结点,我可以使用'linkd'并以丑陋的方式解析stdout以获得目标目录。 b。对于符号链接,似乎没有这样的解决方案。
c。我发现在python 3.1.1 [1]中为win32符号链接提供了本机支持,但我使用的是v2.7.1,现在无法升级。 d。在pywin32模块中有创建符号链接的方法,但没有任何我可以看到它读回

p.s.我对Python很新,所以如果有其他方法可以轻松实现这一点,请告诉我。

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

回答

1

这是所有关于reparse points

Code Project文章应该给你你需要的信息。你必须用ctypes或win32api将它翻译成Python。

+0

谢谢大卫。幸运的是,我掌握了一个python模块http://pypi.python.org/pypi/jaraco.windows来读回符号链接。但它似乎并不支持交界点。在Python中做你提到的翻译不够好,但是会试一试。顺便说一句,如果任何人都可以指向我现有的任何python模块做同样的事情,那就太棒了。 – Hari 2011-03-23 17:25:53

0

除了一些关于如何使用ctypes模块创建符号链接的文章外,您还可以找到使用win32file module here来阅读符号链接的代码片段。我还写了一个Python C-Extension here在Windows上实现连接点,符号链接和硬连接,但我应该警告您需要进行彻底的检修。 (在真正阅读Python C-Extensions之前写过它,所以我没有真正地放置适当的Py_XREF等)

还有一个实现了读,写和检查连接,只使用ctypes模块该存储库。

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 

您也可以解析DIR /A:L输出,如果你不希望依赖于结。