Suppose I have a path named:
/this/is/a/real/path
Now, I create a symbolic link for it:
/this/is/a/link -> /this/is/a/real/path
and then, I put a file into this path:
/this/is/a/real/path/file.txt
and cd it with symbolic path name:
cd /this/is/a/link
now, pwd command will return the link name:
> pwd
/this/is/a/link
and now, I want to get the absolute path of file.txt as:
/this/is/a/link/file.txt
but with python's os.abspath()
or os.realpath()
, they all return the real path (/this/is/a/real/path/file.txt
), which is not what I want.
I also tried subprocess.Popen('pwd')
and sh.pwd()
, but also get the real path instead of symlink path.
How can I get the symbolic absolute path with python?
Update
OK, I read the source code of pwd
so I get the answer.
It's quite simple: just get the PWD
environment variable.
This is my own abspath
to satify my requirement:
def abspath(p):
curr_path = os.environ['PWD']
return os.path.normpath(os.path.join(curr_path, p))
The difference between os.path.abspath
and os.path.realpath
is that os.path.abspath
does not resolve symbolic links, so it should be exactly what you are looking for. I do:
/home/user$ mkdir test
/home/user$ mkdir test/real
/home/user$ mkdir test/link
/home/user$ touch test/real/file
/home/user$ ln -s /home/user/test/real/file test/link/file
/home/user$ ls -lR test
test:
d... link
d... real
test/real:
-... file
test/link:
l... file -> /home/user/test/real/file
/home/user$ python
... python 3.3.2 ...
>>> import os
>>> print(os.path.realpath('test/link/file'))
/home/user/test/real/file
>>> print(os.path.abspath('test/link/file'))
/home/user/test/link/file
So there you go. How are you using os.path.abspath
that you say it resolves your symbolic link?
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With