如果我的工作目录是符号链接,则os.getcwd()
和os.system("pwd")
不会给出相同的结果。我想使用os.path.abspath(".")
来获得我的工作目录(或其中的文件)的完整路径,目的是为了获得与os.path.realpath(".")
相同的结果。
如何在python 2.7中获得类似os.path.abspath(".", followlink=False)
的东西?
示例:/ tmp是/ private / tmp的符号链接
cd /tmp
touch toto.txt
python
print os.path.abspath("toto.txt")
--> "/private/tmp/toto.txt"
os.system("pwd")
--> "/tmp"
os.getcwd()
--> "/private/tmp"
如何从相对路径“ toto.txt”中获取“ /tmp/toto.txt”?
答案 0 :(得分:1)
如果要使用os.system(),请使用 os.system(“ pwd -L”)获取当前工作目录的逻辑路径。
如果从bash shell运行,则可以使用 os.environ [“ PWD”] ,而无需运行系统。
但是这两种解决方案都假定您位于文件所在的目录中。
基于Eric H的界面:
import os,subprocess
def abspath(pathname):
'''Return logical path (not physical) for pathname using Popen'''
if pathname[0]=="/":
return pathname
lpwd = subprocess.Popen(["pwd","-L"],stdout=subprocess.PIPE, shell=True).communicate()[0].strip()
return(os.path.join(lpwd,pathname))
def abspathenv(pathname):
'''Return logical path (not physical) for pathname using bash $PWD'''
if pathname[0]=="/":
return pathname
return(os.path.join(os.environ["PWD"],pathname))
print(abspath("foo.txt"))
print(abspathenv("foo.txt"))
答案 1 :(得分:0)
解决方案是:
from subprocess import Popen, PIPE
def abspath(pathname):
""" Returns absolute path not following symbolic links. """
if pathname[0]=="/":
return pathname
# current working directory
cwd = Popen("pwd", stdout=PIPE, shell=True).communicate()[0].strip()
return os.path.join(cwd, pathname)
print os.path.abspath("toto.txt") # --> "/private/tmp/toto.txt"
print abspath("toto.txt") # --> "/tmp/toto.txt"