Re: How to get the realpath of a symbolic link?

2009-10-31 Thread Emile van Sebille

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'


Emile

--
http://mail.python.org/mailman/listinfo/python-list


Re: How to get the realpath of a symbolic link?

2009-10-31 Thread Peng Yu
On Sat, Oct 31, 2009 at 11:26 AM, Emile van Sebille em...@fenx.com 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.
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: How to get the realpath of a symbolic link?

2009-10-31 Thread Emile van Sebille

On 10/31/2009 10:11 AM Peng Yu said...

 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'.


It still looks like it works here.  I've set up a similar structure and 
appear to get the results you're asking for using os.path.realpath.


# pwd
/home/emile
# ls -l
drwxr-xr-x 3 root root 4096 2009-10-31 10:25 private
lrwxrwxrwx 1 root root   11 2009-10-31 10:25 tmp - private/tmp

# pwd
/home/emile/tmp/abspath
# ls -l
-rw-r--r-- 1 root root 10 2009-10-31 10:25 a
lrwxrwxrwx 1 root root  1 2009-10-31 10:26 b - a

Python 2.6.3 (r263:75183, Oct 15 2009, 15:03:49) [GCC 4.3.2] on linux2
 import os
 os.path.realpath('/home/emile/tmp/a')
'/home/emile/private/tmp/a'
 os.path.realpath('/home/emile/tmp/b')
'/home/emile/private/tmp/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.


Which is what I got above.



Hope this is clear.


--
http://mail.python.org/mailman/listinfo/python-list


Re: How to get the realpath of a symbolic link?

2009-10-31 Thread Terry Reedy

Peng Yu wrote:

On Sat, Oct 31, 2009 at 11:26 AM, Emile van Sebille em...@fenx.com 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

--
http://mail.python.org/mailman/listinfo/python-list


Re: How to get the realpath of a symbolic link?

2009-10-31 Thread Peng Yu
On Sat, Oct 31, 2009 at 1:10 PM, Emile van Sebille em...@fenx.com wrote:
 On 10/31/2009 10:11 AM Peng Yu said...

 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'.


 It still looks like it works here.  I've set up a similar structure and
 appear to get the results you're asking for using os.path.realpath.

 # pwd
 /home/emile
 # ls -l
 drwxr-xr-x 3 root root 4096 2009-10-31 10:25 private
 lrwxrwxrwx 1 root root   11 2009-10-31 10:25 tmp - private/tmp

 # pwd
 /home/emile/tmp/abspath
 # ls -l
 -rw-r--r-- 1 root root 10 2009-10-31 10:25 a
 lrwxrwxrwx 1 root root  1 2009-10-31 10:26 b - a

 Python 2.6.3 (r263:75183, Oct 15 2009, 15:03:49) [GCC 4.3.2] on linux2
 import os
 os.path.realpath('/home/emile/tmp/a')
 '/home/emile/private/tmp/a'
 os.path.realpath('/home/emile/tmp/b')
 '/home/emile/private/tmp/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.

 Which is what I got above.

I'm curious why we get different results. I tried on both linux and
mac. Both of them give me the same results.
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: How to get the realpath of a symbolic link?

2009-10-31 Thread Peng Yu
On Sat, Oct 31, 2009 at 1:46 PM, Terry Reedy tjre...@udel.edu wrote:
 Peng Yu wrote:

 On Sat, Oct 31, 2009 at 11:26 AM, Emile van Sebille em...@fenx.com
 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.

I find the following two files that define realpath. But I don't find
'realpath' in os.py. I looked at 'os.py'. But I don't understand how
the function realpath is introduced in the name space in os.path.
Would you please let me know?

gfind . ! -path '*backup*' -name *.py -type f -exec grep -n def
realpath {} \; -printf %p\\n\\n
193:def realpath(path):
./macpath.py

345:def realpath(filename):
./posixpath.py
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: How to get the realpath of a symbolic link?

2009-10-31 Thread Wolodja Wentland
On Sat, Oct 31, 2009 at 14:48 -0500, Peng Yu wrote:
 On Sat, Oct 31, 2009 at 1:46 PM, Terry Reedy tjre...@udel.edu wrote:
  Peng Yu wrote:
[ snip ]

 I find the following two files that define realpath. But I don't find
 'realpath' in os.py. I looked at 'os.py'. But I don't understand how
 the function realpath is introduced in the name space in os.path.
 Would you please let me know?

 gfind . ! -path '*backup*' -name *.py -type f -exec grep -n def
 realpath {} \; -printf %p\\n\\n
 193:def realpath(path):
 ./macpath.py
 
 345:def realpath(filename):
 ./posixpath.py

The os module needs to support different platforms. The os.path module
is actually one of the platform specific ones (ntpath, posixpath,
...) that are imported 'as path' depending on the platform the code is
executed.

Have a look at the source code of the os module:

--- os.py - Python 2.6.3 ---
...
f 'posix' in _names:
...
import posixpath as path

elif 'nt' in _names:
...
import ntpath as path

import nt
__all__.extend(_get_exports_list(nt))
del nt

...

else:
raise ImportError, 'no os specific module found'

sys.modules['os.path'] = path

--- snip ---

If you really want to understand how a module is working then have a
look at its source code. Python is open source -- Use that privilige!

kind regards

Wolodja Wentland


signature.asc
Description: Digital signature
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: How to get the realpath of a symbolic link?

2009-10-31 Thread Terry Reedy

Peng Yu wrote:


I find the following two files that define realpath. But I don't find
'realpath' in os.py. I looked at 'os.py'. But I don't understand how
the function realpath is introduced in the name space in os.path.
Would you please let me know?

gfind . ! -path '*backup*' -name *.py -type f -exec grep -n def
realpath {} \; -printf %p\\n\\n
193:def realpath(path):
./macpath.py

345:def realpath(filename):
./posixpath.py


That is where realpath is.

--
http://mail.python.org/mailman/listinfo/python-list