简体   繁体   English

使用Python创建损坏的符号链接

[英]Create broken symlink with Python

Using Python I want to create a symbolic link pointing to a path that does not exist. 使用Python我想创建一个指向不存在的路径的符号链接。 However os.symlink just complains about "OSError: [Errno 2] No such file or directory:".. This can easily be done with the ln program, but how to do it in Python without calling the ln program from Python? 然而os.symlink只是抱怨“OSError:[Errno 2]没有这样的文件或目录:”..这可以很容易地用ln程序完成,但是如何在不调用Python的ln程序的情况下在Python中完成它?

Edit: somehow I really messed this up :/ ... both answers below is correct 编辑: 不知怎的,我真的搞砸了这个:/ ...下面的两个答案都是正确的

Such error is raised when you try to create a symlink in non-existent directory. 当您尝试在不存在的目录中创建符号链接时,会引发此类错误。 For example, the following code will fail if /tmp/subdir doesn't exist: 例如,如果/tmp/subdir不存在,则以下代码将失败:

os.symlink('/usr/bin/python', '/tmp/subdir/python')

But this should run successfully: 但这应该成功运行:

src = '/usr/bin/python'
dst = '/tmp/subdir/python'

if not os.path.isdir(os.path.dirname(dst)):
    os.makedirs(os.path.dirname(dst))
os.symlink(src, dst)

The file doesn't need to exist in order to create the symlink. 为了创建符号链接,不需要存在该文件。 The following example demonstrates creating a symlink to a non-existing file: 以下示例演示如何为不存在的文件创建符号链接:

First, check that there's no file named foobar in /home/wieslander/tmp : 首先,检查/home/wieslander/tmp是否没有名为foobar的文件:

[wieslander@rizzo tmp]$ ls -l /home/wieslander/tmp/foobar
ls: cannot access /home/wieslander/tmp/foobar: No such file or directory

Create a symlink named brokensymlink pointing to /home/wieslander/tmp/foobar : 创建一个名为brokensymlink的符号链接,指向/home/wieslander/tmp/foobar

[wieslander@rizzo tmp]$ python
Python 2.5.2 (r252:60911, Sep 30 2008, 15:42:03)
[GCC 4.3.2 20080917 (Red Hat 4.3.2-4)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import os
>>> os.symlink('/home/wieslander/tmp/foobar', 'brokensymlink')

Check that the symlink was created and that the destination still doesn't exist: 检查是否已创建符号链接且目标仍不存在:

[wieslander@rizzo tmp]$ ls -l brokensymlink
lrwxrwxrwx 1 wieslander wieslander 27 19 nov 13.13 brokensymlink -> /home/wieslander/tmp/foobar
[wieslander@rizzo tmp]$ ls -l /home/wieslander/tmp/foobar
ls: cannot access /home/wieslander/tmp/foobar: No such file or directory

Are you sure you are calling symlink with the right parameters? 您确定要使用正确的参数调用符号链接吗?

os.symlink('/usr/bin/python', 'python')

This should create a symlink to /usr/bin/python from python in the current working directory. 这应该在当前工作目录中从python创建一个符号链接到/ usr / bin / python。

This might be your answer: 这可能是你的答案:

$ python
Python 2.5.2 (r252:60911, Dec  2 2008, 09:26:14)
[GCC 3.4.4 (cygming special, gdc 0.12, using dmd 0.125)] on cygwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import os
>>> os.symlink('/this/does/not/exist', 'broken')
>>> os.symlink('broken', '/this/does/not/exist')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
OSError: [Errno 2] No such file or directory

Did you reverse the arguments? 你反驳了这些论点吗? Or are you simply trying to create the symlink in a directory that does not exist? 或者您只是尝试在不存在的目录中创建符号链接?

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM