Понимание shutil.copy2 PermissionError [Errno 13] - PullRequest
0 голосов
/ 04 октября 2018

У меня есть код python-3.6.5, который копирует файлы с использованием shutil.copy2().Я получаю ошибку прав доступа, когда использую ее, и мне трудно отследить источник моей ошибки.Ниже приведен соответствующий фрагмент кода:

>>> genome='HCC2A1.bin.22.fa'
>>> output_folder='/gpfs0/home/group/user/Scratch/somedir/output_directory3/dereplicated_genomes/'
>>> loc='/gpfs0/home/group/user/Scratch/somedir/HCC2A1.bin.22.fa'
>>> shutil.copy2(loc, "{0}{1}".format(output_folder,genome))
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/opt/python/3.6.5/lib/python3.6/shutil.py", line 258, in copy2
    copystat(src, dst, follow_symlinks=follow_symlinks)
  File "/opt/python/3.6.5/lib/python3.6/shutil.py", line 225, in copystat
    _copyxattr(src, dst, follow_symlinks=follow)
  File "/opt/python/3.6.5/lib/python3.6/shutil.py", line 165, in _copyxattr
    os.setxattr(dst, name, value, follow_symlinks=follow_symlinks)
PermissionError: [Errno 13] Permission denied: '/gpfs0/home/group/user/Scratch/somedir/output_directory3/dereplicated_genomes/HCC2A1.bin.22.fa'

Я получаю эту забавную ошибку разрешений.Я озадачен, потому что нет никаких забавных разрешений на файл.Например,

~$ ls -l /gpfs0/home/group/user/Scratch/somedir/HCC2A1.bin.22.fa
-rwxrwxrwx. 1 user group 4850851 Aug 29 13:21 /gpfs0/home/group/user/Scratch/somedir/HCC2A1.bin.22.fa

Кроме того, файл, который shutil.copy2 пытается создать (и предположительно терпит неудачу), на самом деле создан с соответствующими разрешениями.Например,

~$ ls -l /gpfs0/home/group/user/Scratch/somedir/output_directory3/dereplicated_genomes/
total 4768
-rwxrwxrwx. 1 user group 4850851 Aug 29 13:21 HCC2A1.bin.22.fa

Я пытался установить точки останова в модуле системного уровня (для дальнейшего изучения), но безрезультатно.Например (продолжая код интерпретатора Python сверху ...)

>>> import pdb; pdb.set_trace()
--Return--
<function save_history at 0x2aeccefafb70>
> <stdin>(1)<module>()->None
(Pdb) b /gpfs0/export/opt/python/3.6.5/lib/python3.6/shutil.py : 255
Breakpoint 2 at /gpfs0/export/opt/python/3.6.5/lib/python3.6/shutil.py:255
(Pdb) b
Num Type         Disp Enb   Where
1   breakpoint   keep yes   at /gpfs0/export/opt/python/3.6.5/lib/python3.6/shutil.py:165
2   breakpoint   keep yes   at /gpfs0/export/opt/python/3.6.5/lib/python3.6/shutil.py:255
(Pdb) shutil.copy2(loc, "{0}{1}".format(output_folder,genome))
*** PermissionError: [Errno 13] Permission denied: '/gpfs0/home/group/user/Scratch/somedir/output_directory3/dereplicated_genomes/HCC2A1.bin.22.fa'

ВОПРОС

  1. Почему shutil.copy2() терпит неудачу?Это определенно создает файл, и я дал абсолютные пути, избегая символических ссылок.На HCC2A1.bin.22.fa не установлено никаких странных разрешений.

  2. Почему я не могу установить точку останова на системном уровне shutil.py?

...