【问题标题】:Removing a tree on a USB device in Python在 Python 中删除 USB 设备上的树
【发布时间】:2013-08-29 10:08:46
【问题描述】:

我已使用以下代码删除 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'

所以我猜我需要先更改文件夹及其文件的权限,然后才能删除它们?

【问题讨论】:

  • 可能您没有删除权限。显示完整的回溯。
  • @Denis 让我现在为您获取回溯。
  • 嗯。只读文件系统通常意味着驱动器挂载了 'ro' 标志,或者它已经挂载了仅针对特定用户的写权限。您应该检查您是否可以在使用运行 python 脚本的用户登录时使用触摸将文件写入驱动器。
  • 好的,又更新了。对文件使用触摸后,我重新运行了脚本,它运行良好!我可能只是遍历文件夹并使用来自子进程的调用来触摸所有文件(除非有更好的方法从 python 调用触摸)。然后运行 ​​shutil.rmtree。
  • 好的,我有一个解决方案,但由于我的声誉,我不能再发布 8 小时。我会尽快发布。

标签: python linux usb usb-drive shutil


【解决方案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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-18
    • 2011-07-02
    • 1970-01-01
    • 2020-05-22
    • 2016-10-28
    • 1970-01-01
    相关资源
    最近更新 更多