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では、特定のファイル/ディレクトリがシンボリックリンクであるかどうかをチェックする関数はありますか?たとえば、以下のファイルの場合、ラッパー関数はを返す必要があり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
ディレクトリエントリがシンボリックリンクであるかどうかを判断するには、次を使用します。
パスがシンボリックリンクであるディレクトリエントリを参照している場合はTrueを返します。シンボリックリンクがサポートされていない場合は常にFalse。
たとえば、次のようになります。
drwxr-xr-x 2 root root 4096 2011-11-10 08:14 bin/
drwxrwxrwx 1 root root 57 2011-07-10 05:11 initrd.img -> boot/initrd.img-2..
>>> import os.path
>>> os.path.islink('initrd.img')
True
>>> os.path.islink('bin')
False
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):
ln -s ../nonexistentfile flnk
次に、現在のディレクトリで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