2013-11-16 1 views
0

Мне нужно проверить, есть ли на этой платформе поддержка символических ссылок или нет. Я получил этот код из тестового пакета Python.Как проверить символическую поддержку ссылок легко и без усилий?

_can_symlink = None 
def can_symlink(): 
    global _can_symlink 
    if _can_symlink is not None: 
     return _can_symlink 
    symlink_path = TESTFN + "can_symlink" 
    try: 
     os.symlink(TESTFN, symlink_path) 
     can = True 
    except (OSError, NotImplementedError, AttributeError): 
     can = False 
    else: 
     os.remove(symlink_path) 
    _can_symlink = can 
    return can 

Это лучший способ? Я боюсь, что я получил исключение, но не потому, что у меня нет поддержки символических ссылок, но недостаточно для разрешения. Итак, выполнив дополнительную проверку на разрешение, достаточно ли этого кода? Или есть лучший способ сделать эту проверку?

ответ

0

AFAIK, это лучший способ. Обратите внимание, что некоторые файловые системы Microsoft поддерживают символические ссылки, а некоторые нет. Конечно, то же самое относится к Linux и UNIX - если у вас установлена ​​файловая система FAT, которая не поддерживает символические ссылки.

Две незначительные каламбуры с кодом выше:

  1. можении = True может быть перемещен в другое; как правило, меньше ваш пример try, тем лучше
  2. Использование глобального - это один из способов получить что-то с глобальным , но, к сожалению, он также является (модулем) глобальным по объему. Вы можете также предоставить параметр по умолчанию функции, чтобы получить глобальное время жизни , которое является локальным по объему. Или просто используйте класс.
0

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

>>> import platform 
>>> platform.system() 
'Windows' 

Это проще, потому что платформа не добавит этого.

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