How to get the realpath of a symbolic link?

Terry Reedy tjreedy at
Sat Oct 31 19:46:02 CET 2009

Peng Yu wrote:
> On Sat, Oct 31, 2009 at 11:26 AM, Emile van Sebille <emile at> wrote:
>> On 10/31/2009 12:03 AM Peng Yu said...
>>> Suppose that I have the following directory and files. I want to get
>>> the canonical path of a file, a directory or a symbolic link.
>>> For example, for 'b' below, I want to get its canonical path as
>>> '/private/tmp/abspath/b'.
>> So, why isn't realpath working for you?  It looks like it is, and it works
>> that way here:
>>>>> os.path.realpath('/home/emile/vmlinuz')
>> '/root/vmlinuz-2.4.7-10'
> My definition of 'realpath' is different from the definition of
> 'os.path.realpath'. But I'm not short what term I should use to
> describe. I use the following example to show what I want.
> In my example in the original post,
> '/tmp/abspath/b' is a symbolic link to '/tmp/abspath/a' and '/tmp' is
> a symbolic link to '/private/tmp'.
> Therefore, I want to get '/private/tmp/abspath/b', rather than
> '/private/tmp/abspath/a', as the canonical path of 'b'.
> If the argument is a symbolic link os.path.realpath will return the
> actually target of the symbolic link. However, I want the path of the
> symbolic link rather than the path of the target.
> Hope this is clear.

I suspect that you will have to write your own code for your own 
function. os and os.path are written in Python, so look at the code for 
realpath and modify it for your modified definition.

Terry Jan Reedy

More information about the Python-list mailing list