[Tutor] Problem with os.access function. [semantic error, if check does not work]

bob bgailer at alum.rpi.edu
Sat Dec 24 18:36:12 CET 2005


At 05:20 AM 12/24/2005, Panagiotis Atmatzidis wrote:
>Hello,
>
>I am writing a function in order to check if a directory exists. If
>exists the functions must do nothing, otherwise must check the users
>permissions and if it's possible create the dir. Looking at pydoc's
>httpd I found the module "os" and the function "access". From the
>http-doc:
>
>access(...)
>access(path, mode) -> 1 if granted, 0 otherwise
>
>Use the real uid/gid to test for access to a path.  Note that most
>operations will use the effective uid/gid, therefore this routine can
>be used in a suid/sgid environment to test if the invoking user has the
>specified access to the path.  The mode argument can be F_OK to test
>existence, or the inclusive-OR of R_OK, W_OK, and X_OK.
>
>This is my function:
>
>def homedirhandle():
>       path = "/some/dir/"                 # check the existance of the
>directory
>       mode = 755

should be     mode = 0755 (octal representation) for mkdir. For 
access: "The mode argument can be F_OK to test existence, or the 
inclusive-OR of R_OK, W_OK, and X_OK." suggests that only 1 digit is expected.

>       check_path = os.access(path, mode)
>       print check_path
>       if check_path == 'False':

Should be             if check_path == False:

Or even simpler     if not check_path:

Use print repr(check_path). Then you'd see either True or 'True'. 
That would help you see whether check_path is boolean or string.

>          print ""
>          print "Directory /some/dir does not exist."
>          print "Trying to create the directory."
>          uid = os.geteuid()
>          print "the uid is ", uid
>          if uid == '0':

I think (not having UNIX access at the moment) that this should be if uid == 0:

>                   try:
>                        os.mkdir(path, mode)
>                        print ""
>                        print "The directory has been created."
>                        print ""
>                        return path
>                   except OSError, e:
>                         print ""
>                         print >>sys.stderr, "The mkdir command failed:
>%d (%s)" % (e.errno, e.strerror)
>                         print ""
>                         print "Exiting"
>                         sys.exit(1)
>
>          if check_path == '1':

== 1

>             print ""
>             print "The directory /some/dir has been created."
>             print ""
>             return path
>          else:
>             print "Please create the directory /some/dir manually and
>then re-run vuhalndler."
>             print "Exiting"
>             sys.exit()
>       else:
>          print ""
>          print "The directory already exists."
>          print ""
>          return path
>
>Now the problem lies at the first check "  if check_path == 'False':
>". It's a semantic error, the program does not really check the dir,
>it just takes for granted that the dir exists. I tried with 1 before
>putting "False" there.. but it did not work so I took the print result
>of check_path and substitute  1 with False. But still nothing :-(
>
>Why does not make the check? I thought that the functions
>functionality was clear.. probably is not.
>
>
>
>--
>Panagiotis
>_______________________________________________
>Tutor maillist  -  Tutor at python.org
>http://mail.python.org/mailman/listinfo/tutor



More information about the Tutor mailing list