TL;DR - 使用os.getcwd()
您可以使用os.path.realpath
将包含符号链接的路径转换为物理路径,解析任何符号链接:
~/src/stackoverflow $ mkdir targetdir
~/src/stackoverflow $ ln -s targetdir symlink
~/src/stackoverflow $ cd symlink
~/src/stackoverflow/symlink $
~/src/stackoverflow/symlink $ python
>>> import os
>>> import subprocess
>>> import shlex
>>>
>>> path = subprocess.check_output('pwd').strip()
>>> path
'/Users/lukasgraf/src/stackoverflow/symlink'
>>> os.path.realpath(path)
'/Users/lukasgraf/src/stackoverflow/targetdir'
该命令还有一个-P
选项可以pwd
强制执行此操作。
从pwd
手册页(在 OS X 上):
pwd 实用程序将当前工作目录的绝对路径名写入标准输出。
某些 shell 可能提供与此实用程序类似或相同的内置 pwd 命令。请参阅内置(1)手册页。
The options are as follows:
-L Display the logical current working directory.
-P Display the physical current working directory (all symbolic
links resolved).
If no options are specified, the -L option is assumed.
所以这也可以:
>>> subprocess.check_output(shlex.split('pwd -P'))
'/Users/lukasgraf/src/stackoverflow/targetdir\n'
>>>
但是,最好的选择是os.getcwd()
从 Python 标准库中使用:
>>> os.getcwd()
'/Users/lukasgraf/src/stackoverflow/targetdir'
它没有明确记录,但它似乎已经为您解析了符号链接。在任何情况下,您都希望避免使用(使用subprocess
)标准库已经为您提供的东西,例如获取当前工作目录。