1

我使用以下代码删除了 USB 设备上的一棵树,但是我收到了 OSError:

我还用 sudo python 运行了代码。

进口舒蒂尔

导入操作系统

src = "/media/device/my_folder"

如果 os.path.exists(dst):

shutil.rmtree(dst)

我刚刚在另一个脚本中使用了 shutil.copytree(src, dst) 来首先将文件写入设备。但是,USB 设备在复制过程中被移除,这可能是我遇到的问题,因为除了被复制一半的文件之外的所有其他文件都已被移除。

我得到以下回溯:

Traceback (most recent call last):
  File "writetousb/tests/deleteTest.py", line 32, in <module>
    shutil.rmtree(src)
  File "/usr/lib/python2.7/shutil.py", line 252, in rmtree
    onerror(os.remove, fullname, sys.exc_info())
  File "/usr/lib/python2.7/shutil.py", line 250, in rmtree
    os.remove(fullname)
OSError: [Errno 30] Read-only file system: '/media/device/21823/21916.jpg'

所以我猜我需要在删除文件夹和文件之前更改它们的权限?

4

1 回答 1

1

如果我在尝试使用 shutil.rmtree 之前使用 chmod 正确设置权限,那么它应该可以工作。我将对此进行测试并在我知道它有效时提供更新。

我可以确认解决方案有效。

import shutil
import os

src = "/media/device/my_folder"

if os.path.exists(dst):
    os.chmod(dst, 0o777)
    for root,dirs,_ in os.walk(dst):
        for d in dirs :
            os.chmod(os.path.join(root,d) , 0o777)
    shutil.rmtree(dst)
于 2013-08-30T08:03:26.130 回答