关于python中os模块指向软链路径

发布时间 2023-09-15 14:24:00作者: lxd670

关于python os模块获取路径问题

如果py文件放在软链路径下,那么无法获取当前路径,只能获取软链对应的真实路径

Python 3.8.2

创建软链路径

# 1.在/System/Volumes/Data创建ccc目录
mkdir -p /System/Volumes/Data/ccc

# 2.创建软链: test_ccc -> /System/Volumes/Data/ccc
cd ~ && ln -s /System/Volumes/Data/ccc test_ccc && cd test_ccc

# 3.使用pwd获取到
pwd
/Users/lxd670/test_ccc

执行test1.py脚本

使用os获取都是软链指向的路径

脚本路径/Users/lxd670/test_ccc/test_1.py

import os

print('***获取当前目录***')
print(os.getcwd())
print(os.path.abspath(os.path.dirname(__file__)))

print('***获取上级目录***')
print(os.path.abspath(os.path.dirname(os.path.dirname(__file__))))
print(os.path.abspath(os.path.dirname(os.getcwd())))
print(os.path.abspath(os.path.join(os.getcwd(), "..")))

print('***获取上上级目录***')
print(os.path.abspath(os.path.join(os.getcwd(), "../..")))
python3 test2.py

***获取当前目录***
/System/Volumes/Data/ccc
/System/Volumes/Data/ccc
***获取上级目录***
/System/Volumes/Data/ccc
/System/Volumes/Data
/System/Volumes/Data
***获取上上级目录***
/System/Volumes

执行test2.py脚本

使用pwd获取当前路径,并不是软链指向的路径

脚本路径/Users/lxd670/test_ccc/test_2.py

import os
import subprocess

r = subprocess.run(args='pwd', capture_output=True)
res = r.stdout.decode('utf-8').strip()

print(res)
print(os.path.realpath(res))
print(os.path.abspath(res))
python3 test2.py

/Users/lxd670/test_ccc
/System/Volumes/Data/ccc
/Users/lxd670/test_ccc