shutil: permission denied errors on windows

Antoine De Groote antoine at
Tue Nov 7 18:38:21 CET 2006

Thanks for your replies, guys. I found the problem now.

Actually the problem arised just before the code that I had in my 
original post.

Here are the 2 lines that mess things up. It's those that are commented 
out. If not commented, the errors were raised.

Clearly there is an error in the second line. It includes subdirs and s 
instead of files and f. Took me 2 days to finally see it.

for dir, subdirs, files in os.walk(tree_top):

        # subdirs[:] = [s for s in subdirs if 
os.path.join(dir,s).replace('\\', '/') not in excluded]
        # files[:] = [f for f in subdirs if 
os.path.join(dir,s).replace('\\', '/') not in excluded]

         for s in subdirs:
             bak_sub = os.path.join(dir, s).replace(tree_top, backup_dir)
             if not os.path.exists(bak_sub):
                 log('Creating directory %s' % bak_sub)

         for l in files:
             [code pasted earlier]...

But what still beats me is why my minimal example with folders 'a' and 
'b' didn't work... It was independent of this code...

Anyway, my program works now, and that's for the moment the most 
important thing.


John Henry wrote:
> I use the copy function a lot and never have problem.  I suggest that
> you write a no brainer standalone test code and if it still fails
> there, then you have a problem with your installation.
> Antoine De Groote wrote:
>> Google tells quite some things about it, but none of them are satisfactory.
>> I'm on Windows, and shutil operations (e.g. move, copy) throw [Errno 13]
>> Permission denied all the time, for the source files. It seems that this
>> is the case for all my files. But what I don't understand is that
>> yesterday it still worked. I didn't change anything on my system though
>> (at least not that I am aware of). I restarted the computer several
>> times to see if that helped, but it didn't. Also I can't find a process
>> that would be using the files...
>> Has anybody experienced this problem before, or have a solution?
>> Kind regards,
>> antoine
>> Here's the code that throws the errors
>> [...]
>> for l in files:
>>              from_file = os.path.join(dir, l)
>>              to_file = from_file.replace(tree_top, backup_dir)
>>              try:
>>                  if not os.path.exists(to_file):
>>                      log('Copying new      %s' % from_file)
>>                      counter_new += 1
>>                      shutil.copy2(from_file, to_file)
>>                  elif int(os.path.getmtime(from_file)) >
>> int(os.path.getmtime(to_file)):
>>                      log('Copying modified %s' % from_file)
>>                      counter_mod += 1
>>                      shutil.copy2(from_file, to_file)
>>                  elif os.path.getsize(from_file) > os.path.getsize(to_file):
>>                      log('Sizes differ, but not rest: Copying %s' %
>> from_file)
>>                      counter_special += 1
>>                      shutil.copy2(from_file, to_file)
>>                  elif os.path.getsize(from_file) < os.path.getsize(to_file):
>>                      log('Orig file smaller than backup file: Copying
>> %s' % from_file)
>>                      counter_special += 1
>>                      shutil.copy2(to_file, backup_dir+'DIFF_SIZE')
>>                      shutil.copy2(from_file, to_file)
>>                  else:
>>                      #log('not treated: %s' % l)
>>                      pass
>>              except (OSError, IOError), e:
>>                  not_accessible += 1
>>                  print e
>> [...]

More information about the Python-list mailing list