无法在Python和Windows中删除/取消链接到目录的符号链接

3

编辑

我使用mklink命令行在Windows7上创建了一个目录的符号链接:

mklink /d books config

我正在尝试使用Python 2.7(仍在Windows上)删除它。

>>> os.remove('books')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
    sym = symlink_to_dir
    os.unlink(sym) # 
WindowsError: [Error 5] Access is denied: 'books'

这台机器没有限制,我是管理员,从Windows中删除它时没有任何问题 (删除书籍)

删除文件的链接没有问题(与目录相对)。

为什么会这样?

编辑:“del”没有起作用,只是没有返回错误。


“那台机器上没有权限”是什么意思?从字面上理解,答案非常明显:如果你没有权限,你应该会被拒绝访问所有内容。但我无法想出任何更有意义的解释方式... - abarnert
同时,符号链接是否正在使用?例如,您是否在运行的cmd.exe shell中cd到符号链接(或通过符号链接进入子目录)? - abarnert
最后一件事:你几乎肯定不想使用 os.system('del '+sym)。这样做没有办法告诉你它是否成功或失败,如果 sym 包含任何空格或其他特殊字符,则无法正常工作等等。如果你真的需要运行外部命令,请使用 subprocess 而不是 os.system - abarnert
另外,'static' 是文件的名称吗? - abarnert
2个回答

3

抱歉,我疏忽了:

由于它是指向一个目录的链接,在Windows中,与Linux不同,将符号链接视为目录,因此:

从DOS中:

c:\> rmdir symlink

来自 Python:

>>> os.rmdir( 'symlink' )

不是使用"del symlink"、"os.unlink()"或"os.remove()"命令,而是这样做:

在Linux中,看起来就像这样:

$ mkdir a
$ ln -s a b
$ rm b          #ok, since a symlink is treated as a file

$ ln -s a b
$ rmdir b       # error, not a file
rmdir: failed to remove `b': Not a directory

是的,在Windows上删除指向目录的符号链接的正确方法是os.rmdir()。我可以确认原始目录的内容不会被删除。 - Rockallite

1
我猜测,你手上的可能不是类似于*INX上的符号链接,而是硬链接。你应该可以使用os.remove()来删除这个硬链接。

当你回复时,我正要说这个。我们需要知道在“mklink”期间使用了哪些选项! - Dane Hillard

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接