By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
435,404 Members | 2,512 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 435,404 IT Pros & Developers. It's quick & easy.

os.readlink returning value

P: n/a
I was reading os.readlink doc which says:

readlink( path)

Return a string representing the path to which the symbolic link
points. The result may be either an absolute or relative pathname; if
it is relative, it may be converted to an absolute pathname using
os.path.join(os.path.dirname(path), result). Availability: Macintosh,
Unix.

....It's not clear to me when the returning result could be absolute
and when it could be relative.
Could someone clarify this point?

Nov 2 '07 #1
Share this Question
Share on Google+
4 Replies


P: n/a
En Thu, 01 Nov 2007 22:51:14 -0300, Giampaolo Rodola' <gn****@gmail.com>
escribió:
I was reading os.readlink doc which says:

readlink( path)

Return a string representing the path to which the symbolic link
points. The result may be either an absolute or relative pathname; if
it is relative, it may be converted to an absolute pathname using
os.path.join(os.path.dirname(path), result). Availability: Macintosh,
Unix.

...It's not clear to me when the returning result could be absolute
and when it could be relative.
Could someone clarify this point?
That depends on how the symlink was created. Assume the current directory
is /usr/home/giampaolo/any/dir
ln -s ../foo/bar
creates a symbolic link at /usr/home/giampaolo/any/dir/bar pointing to
.../foo/bar (relative to where the link resides). That is, actually
pointing to /usr/home/giampaolo/any/foo/bar (but this absolute path is NOT
stored on the link itself - only ../foo/bar)

Now, a program whose current directory is /usr/home/giampaolo executes
this:
readlink("any/dir/bar")
It will return the string "../foo/bar". One must resolve the .. reference
relative to where the link resides, NOT relative to the current directory.
That is, relative to any/dir. os.path.dirname("any/dir/bar") returns
exactly that. Then, the suggested expression in the docs evaluates to
"any/dir/../foo/bar" - it's not an absolute pathname yet, one should use
abspath() on it. Or instead
os.path.join(os.path.abspath(os.path.dirname(path) ), result)

--
Gabriel Genellina

Nov 2 '07 #2

P: n/a
Giampaolo Rodola' <gn****@gmail.comwrote:
>
I was reading os.readlink doc which says:

readlink( path)

Return a string representing the path to which the symbolic link
points. The result may be either an absolute or relative pathname; if
it is relative, it may be converted to an absolute pathname using
os.path.join(os.path.dirname(path), result). Availability: Macintosh,
Unix.

...It's not clear to me when the returning result could be absolute
and when it could be relative.
Could someone clarify this point?
It will be relative if the symbolic link is relative, and absolute if the
symbolic link is absolute.

ln -s ../../over/there here1
ln -s /home/timr/spot here2

"here1" is a relative link. "here2" is an absolute link.
--
Tim Roberts, ti**@probo.com
Providenza & Boekelheide, Inc.
Nov 2 '07 #3

P: n/a
On 2 Nov, 05:30, "Gabriel Genellina" <gagsl-...@yahoo.com.arwrote:
En Thu, 01 Nov 2007 22:51:14 -0300, Giampaolo Rodola' <gne...@gmail.com
escribió:
I was reading os.readlink doc which says:
readlink( path)
Return a string representing the path to which the symbolic link
points. The result may be either an absolute or relative pathname; if
it is relative, it may be converted to an absolute pathname using
os.path.join(os.path.dirname(path), result). Availability: Macintosh,
Unix.
...It's not clear to me when the returning result could be absolute
and when it could be relative.
Could someone clarify this point?

That depends on how the symlink was created. Assume the current directory
is /usr/home/giampaolo/any/dirln -s ../foo/bar

creates a symbolic link at /usr/home/giampaolo/any/dir/bar pointing to
../foo/bar (relative to where the link resides). That is, actually
pointing to /usr/home/giampaolo/any/foo/bar (but this absolute path is NOT
stored on the link itself - only ../foo/bar)

Now, a program whose current directory is /usr/home/giampaolo executes
this:
readlink("any/dir/bar")
It will return the string "../foo/bar". One must resolve the .. reference
relative to where the link resides, NOT relative to the current directory..
That is, relative to any/dir. os.path.dirname("any/dir/bar") returns
exactly that. Then, the suggested expression in the docs evaluates to
"any/dir/../foo/bar" - it's not an absolute pathname yet, one should use
abspath() on it. Or instead
os.path.join(os.path.abspath(os.path.dirname(path) ), result)

--
Gabriel Genellina
Thanks for the examplanation.
I'd only want to do the same as what ls does in such cases.
Imho, os.readlink() should have the same behaviour of ls, isn't it?

Nov 2 '07 #4

P: n/a
En Fri, 02 Nov 2007 13:44:37 -0300, Giampaolo Rodola' <gn****@gmail.com>
escribió:
On 2 Nov, 05:30, "Gabriel Genellina" <gagsl-...@yahoo.com.arwrote:
>En Thu, 01 Nov 2007 22:51:14 -0300, Giampaolo Rodola' <gne...@gmail.com>
escribió:
readlink( path)
...It's not clear to me when the returning result could be absolute
and when it could be relative.

That depends on how the symlink was created. Assume the current
I'd only want to do the same as what ls does in such cases.
Imho, os.readlink() should have the same behaviour of ls, isn't it?
Yes; os.readlink shows the same as ls -l

--
Gabriel Genellina

Nov 3 '07 #5

This discussion thread is closed

Replies have been disabled for this discussion.