Windows上的符号链接?

44 投票
11 回答
44184 浏览
提问于 2025-04-15 14:25

有没有人知道怎么在不同版本的win32系统上,用Python来创建或读取符号链接?最好是能尽量少写和平台相关的代码,因为我希望我的应用程序能够在多个平台上运行。

11 个回答

14

在子进程中使用mklink命令来创建链接。

from subprocess import call
call(['mklink', 'LINK', 'TARGET'], shell=True)
20

在使用Windows 8.1和NTFS文件系统的情况下,os.symlink在Python 3.3上可以正常工作。

50

NTFS文件系统有一个叫做“连接点”的功能,我觉得你可以用它来代替其他方法。你可以使用Python的win32 API模块来实现,比如下面这个例子:

import win32file

win32file.CreateSymbolicLink(fileSrc, fileTarget, 1)

如果你不想依赖win32API模块,也可以使用ctypes,直接调用CreateSymbolicLink这个win32 API,比如:

import ctypes

kdll = ctypes.windll.LoadLibrary("kernel32.dll")

kdll.CreateSymbolicLinkA("d:\\test.txt", "d:\\test_link.txt", 0)

根据MSDN的说明(http://msdn.microsoft.com/en-us/library/aa363866(VS.85).aspx),最低支持的客户端是Windows Vista。

另外:这个方法也适用于目录(通过第三个参数来指明)。如果支持Unicode,代码看起来是这样的:

kdll.CreateSymbolicLinkW(UR"D:\testdirLink", UR"D:\testdir", 1)

你还可以查看 在Python中创建NTFS连接点

撰写回答