OSError: [Ошибка 1] Операция не разрешена Shutil.move

Итак, я пытаюсь скопировать файл с моего загрузочного диска на внешний с помощью python. Из-за этого os.rename не вариант (я бы получил ошибку кросс-устройства). Я решил попробовать использовать shutdown.move, но затем это выдает OSError 1, утверждая, что операция не разрешена при внутреннем вызове os.chmod. Интересно то, что каталог, в который он перемещается, имеет права 777. Вызов выглядит следующим образом:

if hasattr(f.file,'name'):
                    move(f.file.name,path)

Торговля с полным стеком выглядит следующим образом.

[08/Sep/2014:00:49:36] HTTP Traceback (most recent call last):
  File "/usr/local/lib/python2.7/dist-packages/cherrypy/_cprequest.py", line 670
, in respond
    response.body = self.handler()
  File "/usr/local/lib/python2.7/dist-packages/cherrypy/lib/encoding.py", line 2
17, in __call__
    self.body = self.oldhandler(*args, **kwargs)
  File "/usr/local/lib/python2.7/dist-packages/cherrypy/_cpdispatch.py", line 61
, in __call__
    return self.callable(*self.args, **self.kwargs)
  File "/home/pi/btsync/BitTorrentSyncWeb/py/main.py", line 129, in upload
    move(f.file.name,path)
  File "/usr/lib/python2.7/shutil.py", line 301, in move
    copy2(src, real_dst)
  File "/usr/lib/python2.7/shutil.py", line 131, in copy2
    copystat(src, dst)
  File "/usr/lib/python2.7/shutil.py", line 100, in copystat
    os.chmod(dst, mode)
OSError: [Errno 1] Operation not permitted: '/mnt/bakery/Dump/ck.gif'

Разрешения показаны ниже

$ls -l /mnt/bakery/
    drwxrwxrwx 4 root root 32768 Sep  8 01:30 Dump
$ls -l /mnt/bakery/Dump |grep ck.gif
    -rwxrwxrwx 1 root root 1017711 Sep  8 00:49 ck.gif

person ollien    schedule 08.09.2014    source источник
comment
Вы спрашиваете, как переместить его без изменения разрешений или как заставить работать перемещение с изменением разрешений?   -  person abarnert    schedule 08.09.2014
comment
Я просто спрашиваю, почему я не могу переместить этот файл, и как это исправить. Я должен быть в состоянии переместить его.   -  person ollien    schedule 08.09.2014
comment
Ну, вы пробовали выполнять эти команды в оболочке? Если вы можете воспроизвести это там, то это идеальный вопрос для SuperUser (но не хороший вопрос для переполнения стека). Если chmod работает в оболочке, но не в shutil.move, то у вас есть хороший вопрос SO… но сначала вызовите отдельные методы в Python, чтобы посмотреть, сможете ли вы получить больше информации. Но я готов поспорить, что это первое, и вы спрашиваете не в том месте.   -  person abarnert    schedule 08.09.2014
comment
Понятно. Да, это тоже не работает в оболочке. Пу. Я не понимал, что это проблема. Я попробую некоторые обходные пути, а затем опубликую на SU. Спасибо. РЕДАКТИРОВАТЬ: немного поковырялся, оказалось, проблема в том, что мой жесткий диск отформатирован как FAT32 и, следовательно, не может использовать chmod. Спасибо за вашу помощь.   -  person ollien    schedule 08.09.2014


Ответы (1)


Просто убедитесь, что ваш диск имеет формат, который Linux может chmod. FAT32 не является одним из них.

person ollien    schedule 08.09.2014