Re: TypeError while checking for permissions with os.access() on windows xp
WTF?? Why on IDLE it works, but when i run this script in cmd.exe, the os.getenv('HOME') goes NoneType? I'm to newbie yet to understand this :/ HOME is simply not a standard environment variable that Windows provides. Any program can set/add environment variables as it deems fit; in this case it seems IDLE is setting one, but you can't rely on it outside of IDLE. If you do os.environ["HOMEDRIVE"] + os.environ["HOMEPATH"] it may be what you want. Start up cmd.exe, type 'set' -- that's the default/standard environment variables you have to work with. That's it. --S Yep, now that variable works fine. Thanks. -- http://mail.python.org/mailman/listinfo/python-list
Re: TypeError while checking for permissions with os.access() on windows xp
> > > WTF?? > Why on IDLE it works, but when i run this script in cmd.exe, the > os.getenv('HOME') goes NoneType? > I'm to newbie yet to understand this :/ > HOME is simply not a standard environment variable that Windows provides. Any program can set/add environment variables as it deems fit; in this case it seems IDLE is setting one, but you can't rely on it outside of IDLE. If you do os.environ["HOMEDRIVE"] + os.environ["HOMEPATH"] it may be what you want. Start up cmd.exe, type 'set' -- that's the default/standard environment variables you have to work with. That's it. --S -- http://mail.python.org/mailman/listinfo/python-list
Re: TypeError while checking for permissions with os.access() on windows xp
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: import os os.access(None, os.W_OK) Traceback (most recent call last): File "", line 1, in os.access(None, os.W_OK) TypeError: coercing to Unicode: need string or buffer, NoneType found No, backup_dest is destination for backup. It's this variable: *backup_dest = self.__backup_dest* . *self.__backup_dest = os.getenv('HOME')* - as you can see, self.__backup_dest is a reference to the home directory which is a string. Then backup_dest is a reference to the variable self.__backup_dest. But that second reference seems to be recognised as a NoneType ?? I'm using optparse in my script (that code for checking for permission is a part of my backup script). Maybe i post my complete code: " #!/usr/bin/env python #-*- coding: utf-8 -*- #MyBackUper import os, sys, tarfile import datetime from optparse import OptionParser class Except(Exception): pass class Packer(Except): def __init__(self): self.__backup_dest = os.getenv('HOME') __current_time = datetime.datetime.today().strftime('%Y-%m-%d %H:%M:%S') Except.__init__(self) def doc_note(self): print """ DOCUMENTATION 'Backuper' is a script for doing backups. You can backup with it single files or whole directories. For available commands type 'backuper.py -h' or 'backuper.py --help'. Using it is simple: - to backup single file, type: 'backuper.py -f FILE_PATH BCKP_NAME [DEST_PATH]', where 'FILE_PATH' is exact path to prefered file which you want to backup and 'BCKP_NAME' is the name for backup output file. Default 'DEST_PATH' is placed in home directory, it can't be changed. 'BCKP_NAME' must be given; - to backup whole directory, type: 'backuper.py -d DIR_PATH BCKP_NAME [DEST_PATH]', where 'DIR_PATH' is exact path to prefered directory, which you want to backup and 'BCKP_NAME' is the name for backup output file. Default 'DEST_PATH' is placed in home directory, it can't be changed. 'BCKP_NAME' must be given; """ def __check_set_perm(self, rd_obj_path, backup_dest): try: if os.path.exists(rd_obj_path): if not os.access(rd_obj_path, os.R_OK): 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 not os.access(backup_dest, os.W_OK): 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(1) except (Except), ex: return ex def backup_file(self, rd_obj_path, bkp_obj_name): try: if os.name == "nt": rd_obj_path = rd_obj_path.replace('~/', '%s\\' % os.getenv('HOME')).replace('\\', '') backup_dest = self.__backup_dest print "Checking permissions for reading and writing..." self.__check_set_perm(rd_obj_path, backup_dest) backup_obj = tarfile.open("%s\\%s(%s).tar.bz2" % (backup_dest, bkp_obj_name, __current_time), 'w:bz2') else: rd_obj_path = rd_obj_path.replace('~/', '%s/' % os.getenv('HOME')) backup_dest = self.__backup_dest print "Checking permissions for reading and writing..." self.__check_set_perm(rd_obj_path, backup_dest) backup_obj = tarfile.open("%s/%s(%s).
Re: TypeError while checking for permissions with os.access() on windows xp
ryniek90 wrote: 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: import os os.access(None, os.W_OK) Traceback (most recent call last): File "", line 1, in os.access(None, os.W_OK) TypeError: coercing to Unicode: need string or buffer, NoneType found No, backup_dest is destination for backup. It's this variable: *backup_dest = self.__backup_dest* . *self.__backup_dest = os.getenv('HOME')* - as you can see, self.__backup_dest is a reference to the home directory which is a string. Then backup_dest is a reference to the variable self.__backup_dest. But that second reference seems to be recognised as a NoneType ?? I'm using optparse in my script (that code for checking for permission is a part of my backup script). Maybe i post my complete code: " #!/usr/bin/env python #-*- coding: utf-8 -*- #MyBackUper import os, sys, tarfile import datetime from optparse import OptionParser class Except(Exception): pass class Packer(Except): def __init__(self): self.__backup_dest = os.getenv('HOME') __current_time = datetime.datetime.today().strftime('%Y-%m-%d %H:%M:%S') Except.__init__(self) def doc_note(self): print """ DOCUMENTATION 'Backuper' is a script for doing backups. You can backup with it single files or whole directories. For available commands type 'backuper.py -h' or 'backuper.py --help'. Using it is simple: - to backup single file, type: 'backuper.py -f FILE_PATH BCKP_NAME [DEST_PATH]', where 'FILE_PATH' is exact path to prefered file which you want to backup and 'BCKP_NAME' is the name for backup output file. Default 'DEST_PATH' is placed in home directory, it can't be changed. 'BCKP_NAME' must be given; - to backup whole directory, type: 'backuper.py -d DIR_PATH BCKP_NAME [DEST_PATH]', where 'DIR_PATH' is exact path to prefered directory, which you want to backup and 'BCKP_NAME' is the name for backup output file. Default 'DEST_PATH' is placed in home directory, it can't be changed. 'BCKP_NAME' must be given; """ def __check_set_perm(self, rd_obj_path, backup_dest): try: if os.path.exists(rd_obj_path): if not os.access(rd_obj_path, os.R_OK): 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 not os.access(backup_dest, os.W_OK): 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(1) except (Except), ex: return ex def backup_file(self, rd_obj_path, bkp_obj_name): try: if os.name == "nt": rd_obj_path = rd_obj_path.replace('~/', '%s\\' % os.getenv('HOME')).replace('\\', '') backup_dest = self.__backup_dest print "Checking permissions for reading and writing..." self.__check_set_perm(rd_obj_path, backup_dest) backup_obj = tarfile.open("%s\\%s(%s).tar.bz2" % (backup_dest, bkp_obj_name, __current_time), 'w:bz2') else: rd_obj_path = rd_obj_path.replace('~/', '%s/' % os.getenv('HOME')) backup_dest = self.__backup_dest print "Checking permissions for reading and writing..." self.__check_set_perm(rd_obj_path, backup_dest) backup_obj = tarfile
Re: TypeError while checking for permissions with os.access() on windows xp
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: import os os.access(None, os.W_OK) Traceback (most recent call last): File "", line 1, in os.access(None, os.W_OK) TypeError: coercing to Unicode: need string or buffer, NoneType found No, backup_dest is destination for backup. It's this variable: *backup_dest = self.__backup_dest* . *self.__backup_dest = os.getenv('HOME')* - as you can see, self.__backup_dest is a reference to the home directory which is a string. Then backup_dest is a reference to the variable self.__backup_dest. But that second reference seems to be recognised as a NoneType ?? I'm using optparse in my script (that code for checking for permission is a part of my backup script). Maybe i post my complete code: " #!/usr/bin/env python #-*- coding: utf-8 -*- #MyBackUper import os, sys, tarfile import datetime from optparse import OptionParser class Except(Exception): pass class Packer(Except): def __init__(self): self.__backup_dest = os.getenv('HOME') __current_time = datetime.datetime.today().strftime('%Y-%m-%d %H:%M:%S') Except.__init__(self) def doc_note(self): print """ DOCUMENTATION 'Backuper' is a script for doing backups. You can backup with it single files or whole directories. For available commands type 'backuper.py -h' or 'backuper.py --help'. Using it is simple: - to backup single file, type: 'backuper.py -f FILE_PATH BCKP_NAME [DEST_PATH]', where 'FILE_PATH' is exact path to prefered file which you want to backup and 'BCKP_NAME' is the name for backup output file. Default 'DEST_PATH' is placed in home directory, it can't be changed. 'BCKP_NAME' must be given; - to backup whole directory, type: 'backuper.py -d DIR_PATH BCKP_NAME [DEST_PATH]', where 'DIR_PATH' is exact path to prefered directory, which you want to backup and 'BCKP_NAME' is the name for backup output file. Default 'DEST_PATH' is placed in home directory, it can't be changed. 'BCKP_NAME' must be given; """ def __check_set_perm(self, rd_obj_path, backup_dest): try: if os.path.exists(rd_obj_path): if not os.access(rd_obj_path, os.R_OK): 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 not os.access(backup_dest, os.W_OK): 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(1) except (Except), ex: return ex def backup_file(self, rd_obj_path, bkp_obj_name): try: if os.name == "nt": rd_obj_path = rd_obj_path.replace('~/', '%s\\' % os.getenv('HOME')).replace('\\', '') backup_dest = self.__backup_dest print "Checking permissions for reading and writing..." self.__check_set_perm(rd_obj_path, backup_dest) backup_obj = tarfile.open("%s\\%s(%s).tar.bz2" % (backup_dest, bkp_obj_name, __current_time), 'w:bz2') else: rd_obj_path = rd_obj_path.replace('~/', '%s/' % os.getenv('HOME')) backup_dest = self.__backup_dest print "Checking permissions for reading and writing..." self.__check_set_perm(rd_obj_path, backup_dest) backup_obj = tarfile.open("%s/%s(%s).
Re: TypeError while checking for permissions with os.access() on windows xp
On Aug 21, 1:33 pm, ryniek90 wrote: > 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: >>> import os >>> os.access(None, os.W_OK) Traceback (most recent call last): File "", line 1, in os.access(None, os.W_OK) TypeError: coercing to Unicode: need string or buffer, NoneType found -- http://mail.python.org/mailman/listinfo/python-list