2009-11-19 3 views
4

Использование Python Я хочу создать символическую ссылку, указывающую на путь, который не существует. Однако os.symlink просто жалуется на «OSError: [Errno 2] Нет такого файла или каталога:« Это можно легко сделать с помощью программы ln, но как это сделать на Python без вызова программы ln от Python?Создание сломанной символической ссылки с Python

Edit:как-то я действительно испортил это вверх:/... оба ответа ниже правильно

+0

какая версия python вы используете? – SilentGhost

+0

какая операционная система вы используете, и уверены ли вы, что целевой каталог для символической ссылки существует? –

+0

Не могли бы вы просто добавить вывод из интерактивного сеанса здесь? Я попробовал ответ от Pär Wieslander, и он отлично работает на моей панели Solaris и на окнах (в cygwin). Однако, если вы отмените аргументы, я получаю ту же ошибку, что и вы. –

ответ

7

Такая ошибка возникает при попытке создать символическую ссылку в несуществующей директории. Например, следующий код не сработает, если /tmp/subdir не существует:

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

Но это должно работать успешно:

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) 
0

Вы уверены, что вы вызываете симлинк с нужными параметрами?

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

Это должно создать символическую ссылку на/USR/BIN/питон из питона в текущем рабочем каталоге.

+0

Ooops, я должен был внимательно прочитать вопрос. Извини за это. Кажется, вам нужно, чтобы файл ссылался на него. – tayfun

3

Чтобы создать символическую ссылку, файл не обязательно должен существовать. Следующий пример демонстрирует создание символической ссылки на несуществующий файл:

Во-первых, проверьте, что нет файла с именем foobar в /home/wieslander/tmp:

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

Создать символическую ссылку с именем brokensymlink указывая на /home/wieslander/tmp/foobar:

[[email protected] 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') 

Убедитесь, что символическая ссылка была создана и что адресата еще не существует:

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

Это может быть ваш ответ:

$ 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 

ли вам отменить аргументы? Или вы просто пытаетесь создать символическую ссылку в директории, которая не существует?

Смежные вопросы