【问题标题】:Python os.rename if file system is fullPython os.rename 如果文件系统已满
【发布时间】:2011-08-15 18:12:45
【问题描述】:

我问这个是因为没有办法自己尝试(如果有请分享它(:)。

我正在使用 Python os 库进行一些文件处理,特别是使用 os.rename() 进行文件移动/重命名。

Python 文档解释了此函数可能引发的一些异常here,但没有提及完整的文件系统案例。我猜它会引发 IOError,对吗?

干杯。

【问题讨论】:

  • 当文件系统已满时,所有赌注都关闭。由于操作系统无法创建临时文件,您的 Python 应用程序可能会以非常隐晦的方式崩溃。为什么这么问?你想解决什么问题?
  • 基本上我有一个包含我需要处理的文件的假脱机目录,一旦它们被处理,我需要将它们移动到清理假脱机目录的存档目录(我无法删除它们)。此脚本由 cron 守护程序运行。我想处理完整的文件系统案例并在我的脚本中优雅地退出,这样它就不会做一些奇怪的事情。
  • 完整的文件系统已经很奇怪了。虽然优雅的关闭是可取的——当然你应该编码——所有的赌注都将被取消。不会发生任何值得信赖的事情。
  • 经验之谈!你是对的,情况从一开始就很奇怪。感谢您的快速回复。
  • 好吧,当驱动器已满时,并不是所有的东西都会丢失,至少只要操作系统还有一些交换空间。我希望每个写入磁盘的程序都能合理地处理一个完整的磁盘,即告诉用户而不仅仅是报告一些一般性错误。

标签: python file-io operating-system filesystems


【解决方案1】:

您可以通过填充一个小分区来测试它,然后在填充的文件系统上尝试文件操作。在 *nix 系统上,您可以挂载 tmpfs;对于 Windows 可能使用 USB 记忆棒。

【讨论】:

    【解决方案2】:

    实际上这应该很少出现,但如果你想测试我建议创建一个小文件系统(我不知道你在什么操作系统上,但这可能在一个虚拟分区上,一个 RAM 磁盘,闪存驱动器等)并用垃圾文件加载它,看看会发生什么。可能是这样的:

    aBigNumber = 100000000000000000000000000000000
    counter = 0
    while (True):
        counter += 1
        anotherFile = open(`counter` + ".txt", "wb")
        anotherFile.write("0" * aBigNumber)
        anotherFile.close()
    

    当您遇到异常时,您应该能够验证磁盘是否已满,然后您就会知道会出现什么样的错误。

    【讨论】:

    • +1:聪明。请注意,填满操作系统的“var”或“tmp”分区可能会带来灾难性的后果。您不应该期待这个错误。这是诊断文件系统已满的唯一方法。由于操作系统可能会崩溃,因此很可能会发生一些奇怪的(且不可重现的)而不是此错误。
    • 要去试试。我会带着答案回来的。谢谢朋友。
    • 顺便说一句,该分区不是像“var”那样的系统分区,它只是用作存储。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-06
    • 2011-10-12
    • 1970-01-01
    • 2012-11-12
    • 2014-04-07
    • 2021-01-04
    相关资源
    最近更新 更多