Di python, apakah ada fungsi untuk memeriksa apakah file / direktori yang diberikan adalah symlink? Misalnya, untuk file di bawah ini, fungsi pembungkus saya harus kembali 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
sumber
sumber
lnk
, danos.islink('a_shortcut.lnk')
kembaliFalse
.IO_REPARSE_TAG_SYMLINK
).Untuk python 3.4 dan yang lebih baru, Anda dapat menggunakan kelas Path
from pathlib import Path # rpd is a symbolic link >>> Path('rdp').is_symlink() True >>> Path('README').is_symlink() False
Anda harus berhati-hati saat menggunakan metode is_symlink (). Ini akan mengembalikan True bahkan target tautannya tidak ada selama objek bernama adalah symlink. Misalnya (Linux / Unix):
Kemudian, di direktori Anda saat ini, jalankan python
>>> from pathlib import Path >>> Path('flnk').is_symlink() True >>> Path('flnk').exists() False
Programmer harus memutuskan apa yang sebenarnya dia inginkan. Python 3 tampaknya telah mengganti nama banyak kelas. Mungkin bermanfaat untuk membaca halaman manual untuk kelas Path: https://docs.python.org/3/library/pathlib.html
sumber
is_symlink()
benar, danexists()
salah, itulah yang saya harapkan. Bisakah Anda memberikan sumber untuk kekhawatiran Anda?is_symlink
mengembalikantrue
file yang tidak ada (begituexists()
juga mengembalikantrue
).Tanpa niat untuk menggembungkan topik ini, tetapi saya dialihkan ke halaman ini karena saya sedang mencari symlink untuk menemukannya dan mengonversinya menjadi file nyata dan menemukan skrip ini di dalam pustaka alat 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")
sumber
mkrealfile(...)
berada pada level yang sama dengan fungsinya sendiri ...