有时我会先把路径压一下再判断,尤其是目录里有符号链接的时候。
环境:Python 3.9+,只用标准库。保存为 resolve-demo.py:
from pathlib import Path
base = Path('demo-root').resolve()
(base / 'real').mkdir(parents=True, exist_ok=True)
paths = [
Path('demo-root/real/a.txt'),
Path('./demo-root/real/../real/b.txt'),
]
for p in paths:
print(p, '=>', p.resolve(), p.resolve().is_relative_to(base))
我一般不是拿它当‘安全校验’用,就是先把路径看清楚一点。resolve 后再比,脑子轻松些。