En Thu, 01 Nov 2007 22:51:14 -0300, Giampaolo Rodola' <[EMAIL PROTECTED]> 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 -- http://mail.python.org/mailman/listinfo/python-list