TypeError while checking for permissions with os.access() on windowsxp

R

ryniek90

I've got some code that checks priviliges on two paths:
First - chosen by user
Second - hardcoded home directory represented by **os.getenv('HOME')** -
(os.getenv('HOME') works both on Linux and Windows)

Here's the code:
"
def __check_set_perm(self, rd_obj_path, backup_dest):

try:

if os.path.exists(rd_obj_path):
if os.access(rd_obj_path, os.R_OK) != True:
print "Have no permissions on [%s] for reading
operation.\nTrying to set them..." % os.path.split(rd_obj_path)[1]
if not os.path.isdir(rd_obj_path):
os.chmod(rd_obj_path, stat.S_IREAD)
else:
for root, dirs, files in os.walk(rd_obj_path):
for f in files:
os.chmod(os.path.join(root, f),
stat.S_IREAD)
print "Get permissions for reading on [%s]
successfully." % os.path.split(rd_obj_path)[1]
else:
print "Have permissions on [%s] for reading." %
os.path.split(rd_obj_path)[1]

if os.access(backup_dest, os.W_OK) != True:
print "Have no permissions on [%s] for writing
operation.\nTrying to set them..." % os.path.split(backup_dest)[1]
os.chmod(backup_dest, stat.S_IWRITE)
print "Get permissions for reading on [%s]
successfully." % os.path.split(backup_dest)[1]
else:
print "Have permissions on [%s] for writing." %
os.path.split(backup_dest)[1]
else:
return "Can't find specified path - [%s]." % rd_obj_path
sys.exit(0)

except (Except), ex:
return ex
"


This code is part of my backup script. When script checks for reading
permission on 'user chosen path' it seems ok, but when it checks for
writing permissions on 'home directory', (this line: **if
os.access(backup_dest, os.W_OK) != True**), i get error:
**TypeError: coercing to Unicode: need string or buffer, NoneType found**
The second os.access check fails, but don't know why. When i turned
os.W_OK to integer, i get the same error.
But when changed os.W_OK or that int to string, i get error that integer
is required. I'm launching this code on WinXP Prof+SP3, on Administrator
account. Is it bug in os.acces() or my code is written wrong?
Btw. i kow that os.chmod in windows can set only read-olny flag, so
later i'll change the line with **os.chmod(path, stat.S_IWRITE)**

Thanks and cheers.
 
S

Simon Forman

I've got some code that checks priviliges on two paths:
First - chosen by user
Second - hardcoded home directory represented by **os.getenv('HOME')** -
(os.getenv('HOME') works both on Linux and Windows)

Here's the code:
"
def __check_set_perm(self, rd_obj_path, backup_dest):

        try:

            if os.path.exists(rd_obj_path):
                if os.access(rd_obj_path, os.R_OK) != True:
                    print "Have no permissions on [%s] for reading
operation.\nTrying to set them..." % os.path.split(rd_obj_path)[1]
                    if not os.path.isdir(rd_obj_path):
                        os.chmod(rd_obj_path, stat.S_IREAD)
                    else:
                        for root, dirs, files in os.walk(rd_obj_path):
                            for f in files:
                                os.chmod(os.path.join(root, f),
stat.S_IREAD)
                    print "Get permissions for reading on [%s]
successfully." % os.path.split(rd_obj_path)[1]
                else:
                    print "Have permissions on [%s] for reading." %
os.path.split(rd_obj_path)[1]

                if os.access(backup_dest, os.W_OK) != True:
                    print "Have no permissions on [%s] for writing
operation.\nTrying to set them..." % os.path.split(backup_dest)[1]
                    os.chmod(backup_dest, stat.S_IWRITE)
                    print "Get permissions for reading on [%s]
successfully." % os.path.split(backup_dest)[1]
                else:
                    print "Have permissions on [%s] for writing." %
os.path.split(backup_dest)[1]
            else:
                return "Can't find specified path - [%s]." % rd_obj_path
                sys.exit(0)

        except (Except), ex:
            return ex
"

This code is part of my backup script. When script checks for reading
permission on 'user chosen path' it seems ok, but when it checks for
writing permissions on 'home directory', (this line: **if
os.access(backup_dest, os.W_OK) != True**), i get error:
**TypeError: coercing to Unicode: need string or buffer, NoneType found**
The second os.access check fails, but don't know why. When i turned
os.W_OK to integer, i get the same error.
But when changed os.W_OK or that int to string, i get error that integer
is required. I'm launching this code on WinXP Prof+SP3, on Administrator
account. Is it bug in os.acces() or my code is written wrong?
Btw. i kow that os.chmod in windows can set only read-olny flag, so
later i'll change the line with **os.chmod(path, stat.S_IWRITE)**

Thanks and cheers.

First, some nitpicking: Include the whole traceback when posting about
errors please. Don't write "if some_boolean_expression != True:"
instead prefer "if not some_boolean_expression:". Also, in your code
"except (Except), ex: return ex" the parentheses are redundant,
there's no "Except" Exception (unless you created one yourself) and
why are you catching and returning the Exception object? (Also,
what's that "sys.exit(0)" doing in there? And why exit with 0 if there
was a problem? Exit code 0 means "no problem".)


Second, from what you've said backup_dest must be None:

Traceback (most recent call last):
File "<pyshell#1>", line 1, in <module>
os.access(None, os.W_OK)
TypeError: coercing to Unicode: need string or buffer, NoneType found
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,995
Messages
2,570,230
Members
46,819
Latest member
masterdaster

Latest Threads

Top