В python есть функция для проверки, является ли данный файл / каталог символической ссылкой? Например, для файлов ниже должна вернуть моя функция-оболочка True
.
# ls -l
total 0
lrwxrwxrwx 1 root root 8 2012-06-16 18:58 dir -> ../temp/
lrwxrwxrwx 1 root root 6 2012-06-16 18:55 link -> ../log
python
operating-system
Bandicoot
источник
источник
lnk
иos.islink('a_shortcut.lnk')
возвращаютсяFalse
.IO_REPARSE_TAG_SYMLINK
).Для python 3.4 и выше вы можете использовать класс Path
from pathlib import Path # rpd is a symbolic link >>> Path('rdp').is_symlink() True >>> Path('README').is_symlink() False
Будьте осторожны при использовании метода is_symlink (). Он вернет True, даже если цель ссылки не существует, пока названный объект является символической ссылкой. Например (Linux / Unix):
Затем в вашем текущем каталоге запустите python
>>> from pathlib import Path >>> Path('flnk').is_symlink() True >>> Path('flnk').exists() False
Программист должен решить, чего он действительно хочет. Python 3, похоже, переименовал множество классов. Возможно, стоит прочитать страницу руководства для класса Path: https://docs.python.org/3/library/pathlib.html
источник
is_symlink()
это правда, иexists()
ложно, чего я и ожидал. Можете ли вы указать источник своих опасений?is_symlink
возвращаетсяtrue
для несуществующих файлов (поэтомуexists()
также возвращаетсяtrue
).Без намерения раздувать эту тему, но я был перенаправлен на эту страницу, так как искал символические ссылки, чтобы найти их и преобразовать в реальные файлы, и нашел этот скрипт в библиотеке инструментов python.
#Source https://github.com/python/cpython/blob/master/Tools/scripts/mkreal.py import sys import os from stat import * BUFSIZE = 32*1024 def mkrealfile(name): st = os.stat(name) # Get the mode mode = S_IMODE(st[ST_MODE]) linkto = os.readlink(name) # Make sure again it's a symlink f_in = open(name, 'r') # This ensures it's a file os.unlink(name) f_out = open(name, 'w') while 1: buf = f_in.read(BUFSIZE) if not buf: break f_out.write(buf) del f_out # Flush data to disk before changing mode os.chmod(name, mode) mkrealfile("/Users/test/mysymlink")
источник
mkrealfile(...)
находится на том же уровне, что и его собственная функция ...