Python: getcwd и pwd, если каталог является символической ссылкой, дают разные результаты - PullRequest
0 голосов
/ 13 февраля 2019

Если мой рабочий каталог является символической ссылкой, 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"

Как я могу получить "/tmp/toto.txt" изотносительный путь "toto.txt"?

1 Ответ

0 голосов
/ 13 февраля 2019

Решение:

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"
...