Donn Cave wrote: >In article <[EMAIL PROTECTED]>, > <[EMAIL PROTECTED]> wrote: >... >> I used the python executable from the build directory to run the >> following program: >> >> import os >> >> def main(): >> if not (os.path.exists("/")): >> print "/ does not exist" >> else: >> print "/ exists" >> if not (os.path.isdir("/")): >> print "/ is not a directory" >> else: >> print "/ ok" >> >> if name == " main ": >> main() >> >> The output is: >> >> / exists >> / is not a directory >> >> It's the same for every (existing) directory name I try: >os.path.isdir() >> always returns false. >> >> It looks as if the stat results are not recognised: os.path.exists() >> works, but all the functions os.path.isdir(), os.path.isfile() etc. >> don't. >> >> Could anyone help me to solve the problem? > >Unless there are other Reliant users here ahead of you, some >of it is going to be up to you. If you follow isdir() back, >you'll find some hard-coded octal bitmask definitions, including >S_IFDIR = 0040000. > >Check it out. Try to use that value the way they're using it, >in C and in Python, and print out all the values involved. >At worst, if C comes out wrong too, you may have a question >that the vendor will be more likely to respond to.
First, thanks very much for your help. On the Reliant Unix system, C and Python both use the value you mention above. I added some debug prints to isdir in Lib/posixpath.py in the build tree: def isdir(path): """Test whether a path is a directory""" try: st = os.stat(path) print "isdir: OK, path: %s" % path print "st: %s" % st print "size, mtime, atime, ctime, dev, ino:" print "%s %s %s %s %s %s" % (st.st_size, st.st_mtime, st.st_atime, st.st_ctime, st.st_dev, st.st_ino) except os.error: print "isdir: OS.ERROR, path: %s" % path return False return stat.S_ISDIR(st.st_mode) and to S_ISDIR in Lib/stat.py: def S_ISDIR(mode): print "S_ISDIR: S_IFMT(mode): %s, S_IFDIR: %d" % (S_IFMT(mode), S_IFDIR) print "mode: %s" % mode return S_IFMT(mode) == S_IFDIR Then my sample program (see quote above) produces the following output: isdir: OK, path: /usr/local/lib/python2.4/site-packages st: (2, 1088705490076141L, 1050758L, 0, 1, 0, 4797493958154069376L, 870000000, 870000000, 0) size, mtime, atime, ctime, dev, ino: 4797493958154069376 870000000 870000000 0 1050758 1088705490076141 S_ISDIR: S_IFMT(mode): 0, S_IFDIR: 16384 mode: 2 isdir: OK, path: /usr/local/lib/site-python st: (2, 1088653950468589L, 1050758L, 0, 1, 0, 4797493958164069376L, 880000000, 880000000, 0) size, mtime, atime, ctime, dev, ino: 4797493958164069376 880000000 880000000 0 1050758 1088653950468589 S_ISDIR: S_IFMT(mode): 0, S_IFDIR: 16384 mode: 2 / exists isdir: OK, path: / st: (48, 8589951469L, 1050752L, 0, 0, 0, 4797500748297364352L, 120000000, 120000000, 6) size, mtime, atime, ctime, dev, ino: 4797500748297364352 120000000 120000000 6 1050752 8589951469 S_ISDIR: S_IFMT(mode): 0, S_IFDIR: 16384 mode: 48 / is not a directory The stat values do not make any sense. It seems that the value used for the mode is really the numbers of links (I created the two empty /usr/local... directories to prevent the os.error exception): $ ls -ldi /usr/local/lib/python2.4/> 2 drwxr-xr-x 48 root root 2560 May 14 09:02 / 253484 drwxr-xr-x 2 root other 96 May 25 08:46 /usr/local/lib/python2.4/site-packages 253472 drwxr-xr-x 2 root other 96 May 25 08:46 /usr/local/lib/site-python I'm a very beginner with Python and I'm not at all familiar with the build structure of Python. (I just wanted to setup a Subversion repository and to run some contributed Python hook scripts.) It would be very helpful if you could give me some hint in which source and function the C stat() results are mapped to the stat values accessible from Python. Then I can try a bit debugging there. - Servatius ------------------------------------------------------------------------ Servatius Brandt Phone: +49 89 636-41504 Fujitsu Siemens Computers Fax: +49 89 636-48716 EP SW AD C++ Email: [EMAIL PROTECTED] -- http://mail.python.org/mailman/listinfo/python-list