SF patch #461781 by Chris Lawrence: os.path.realpath - Resolve symlinks:

   Once upon a time, I put together a little function
   that tries to find the canonical filename for a given
   pathname on POSIX. I've finally gotten around to
   turning it into a proper patch with documentation.
   On non-POSIX, I made it an alias for 'abspath', as
   that's the behavior on POSIX when no symlinks are
   encountered in the path.

   Example:
   >>> os.path.realpath('/usr/bin/X11/X')
   '/usr/X11R6/bin/X'
diff --git a/Lib/posixpath.py b/Lib/posixpath.py
index 6bf40f8..0f6b6a7 100644
--- a/Lib/posixpath.py
+++ b/Lib/posixpath.py
@@ -379,3 +379,24 @@
     if not isabs(path):
         path = join(os.getcwd(), path)
     return normpath(path)
+
+
+# Return a canonical path (i.e. the absolute location of a file on the
+# filesystem).
+
+def realpath(filename):
+    """Return the canonical path of the specified filename, eliminating any
+symbolic links encountered in the path."""
+    filename = abspath(filename)
+
+    bits = ['/'] + filename.split('/')[1:]
+    for i in range(2, len(bits)+1):
+        component = join(*bits[0:i])
+        if islink(component):
+            resolved = os.readlink(component)
+            (dir, file) = split(component)
+            resolved = normpath(join(dir, resolved))
+            newpath = join(*([resolved] + bits[i:]))
+            return realpath(newpath)
+        
+    return filename