【问题标题】:No usable temporary directory found找不到可用的临时目录
【发布时间】:2013-06-04 11:17:25
【问题描述】:

我正在寻找一个临时目录, 但是当我试图获取目录时使用

tempfile.gettempdir()

它给我的错误

 File "/usr/lib/python2.6/tempfile.py", line 254, in gettempdir
    tempdir = _get_default_tempdir()
  File "/usr/lib/python2.6/tempfile.py", line 201, in _get_default_tempdir
    ("No usable temporary directory found in %s" % dirlist))
IOError: [Errno 2] No usable temporary directory found in ['/tmp', '/var/tmp', '/usr/tmp', '/home/openerp/openerp-server']

该目录的权限是root拥有的777。

【问题讨论】:

  • 我只知道磁盘已满时才会出现此问题,因为该方法通过尝试写入临时文件来找到有效目录。我想这不是你的问题?
  • @BhajunSingh:我对你声称 Python 会通过实际尝试在那里创建文件来确定直接使用哪个文件感到震惊。但这是真的:hg.python.org/cpython/file/2.7/Lib/tempfile.py#l176 - 见_get_default_tempdir()。不使用os.access() 来检查是否可以写入目录似乎很奇怪。
  • 我认为@BhajunSingh 是对的,磁盘可能已满。 stackoverflow.com/questions/7518297/…
  • @BrentWashburne 我已经检查了那个答案,然后我会检查磁盘使用情况。

标签: python odoo


【解决方案1】:

这种错误发生在两种情况

  1. 权限(应为 drwxrwxrwt 并由 root 拥有)
  2. 空间

要检查空间(磁盘使用情况)只需在终端上运行命令

df -h

将列出unix上的磁盘使用情况并得到类似的输出

Filesystem      Size  Used Avail Use% Mounted on
/dev/sda5        28G   15G   12G  58% /

如果根(挂载在 / 上)使用率为 100%。

你需要清理tmp目录或者重启机器或者在root上腾出一些空间。

【讨论】:

    【解决方案2】:

    如果 inode 已满,也会出现问题。

    你可以输入df -i

    # df -i
    Filesystem      Inodes   IUsed  IFree IUse% Mounted on
    udev            253841     322 253519    1% /dev
    tmpfs           255838     430 255408    1% /run
    /dev/xvda1     5120000 5120000      0  100% /
    tmpfs           255838       1 255837    1% /dev/shm
    tmpfs           255838       7 255831    1% /run/lock
    tmpfs           255838      16 255822    1% /sys/fs/cgroup
    tmpfs           255838       4 255834    1% /run/user/1000
    

    【讨论】:

    • 点赞。因为这绝对是导致此问题的另一个原因。我正在缓存很多超过 inode 限制的日志。输入 df -I ,如果是 100%,那么你需要清除这些文件。记录的文件和不同文件中的数据缓存一定是可能的问题。
    • 要么空间不足,要么你可以创建的文件数量用完。
    【解决方案3】:

    当文件系统已切换到只读模式时,可能会发生此错误。

    【讨论】:

    • 说出如何解决问题会更有帮助,而不仅仅是它是什么。
    • 有什么解决办法...?
    • 您可以通过mount 命令检查这是否是问题所在。如果您的文件系统有ro 而不是rw,则您处于只读模式。
    【解决方案4】:

    我在 Docker 中运行 python 脚本时遇到了同样的问题。以下命令为我修复了它:

    docker rmi $(docker images --quiet --filter "dangling=true")
    

    【讨论】:

    • 这为我解决了问题,但删除的内容超出了需要。
    【解决方案5】:

    当 / 上没有空格时,我遇到了同样的问题。

    问题:

    文件 "/usr/lib64/python2.6/tempfile.py", line 201, in _get_default_tempdir("No usable temporary directory found in %s" % dirlist))
    IOError: [Errno 2] 在 ['/tmp', '/var/tmp', '/usr/tmp', '/'] 中找不到可用的临时目录 [FAILED]
    

    [root@master hue]# df -h

    Filesystem Size Used Avail Use% Mounted on

    /dev/mapper/vg_master-lv_root

                 35G   34G     0 100%     /
    

    tmpfs
    7.8G 72K 7.8G 1% /dev/shm

    /dev/sda1
    477M 34M 418M 8%/开机

    当我清理出一些空间时,它对我来说效果很好。

    [root@master log]# service hue start

    开始色调:[OK]

    [root@master 日志]#

    【讨论】:

    • 我在大学容器上的虚拟机上工作,您的回答对我没有帮助。问题依然存在!
    【解决方案6】:

    肯定是磁盘空间问题,

    在终端上输入df -h 您应该会看到如下输出(注意其中一个文件系统上的 100%)

    $ df -h
    Filesystem      Size  Used Avail Use% Mounted on
    udev            992M     0  992M   0% /dev
    tmpfs           200M   21M  179M  11% /run
    /dev/xvda1      7.8G  7.8G  0  100% /
    tmpfs          1000M     0 1000M   0% /dev/shm
    tmpfs           5.0M     0  5.0M   0% /run/lock
    tmpfs          1000M     0 1000M   0% /sys/fs/cgroup
    tmpfs           200M     0  200M   0% /run/user/997
    tmpfs           200M     0  200M   0% /run/user/1042
    

    在这种情况下,您需要通过删除路径根/ 上的文件、工件文件夹等来腾出空间

    【讨论】:

      【解决方案7】:

      我在 Windows 7x64 机器上遇到了同样的问题。磁盘空间和权限没问题。

      当我执行时

      tempfile.mkdtemp(prefix='MyPrefix_')
      

      在 python 控制台中手动创建了目录%TEMP%\MyPrefix_xxxx。 但是当我从脚本中执行相同操作时,我收到了错误IOError: [Errno 2] No usable temporary directory found in [...]

      我使用dir参数解决了这个问题:

       # '.' is a default value for example
       tempfile.mkdtemp(prefix='MyPrefix_', dir=os.environ.get('TEMP', '.')) 
      

      从脚本之后它运行良好。

      【讨论】:

        【解决方案8】:

        我今天早些时候遇到了这个问题。我在去吃午饭之前启动了一个嵌入在 jupyter 中的查询,然后我返回 jupyter 并抛出某种类型的错误(不记得它到底是什么)。当我尝试在终端中重新启动 jupyter 时,我收到了 OP 问题中描述的错误(没有可用的临时目录)。上面的答案不起作用,所以我尝试重新启动我的整个虚拟机,此时我得到了here 描述的错误。按照该线程的最佳答案中的说明进行操作后,问题已解决。

        【讨论】:

        • 嗨,欢迎来到 SO。仅供参考,这应该是评论而不是答案
        • 谢谢-您能详细说明一下吗?我想如果有人咨询这个线程来回答 OP 的问题,他们可能会对我提供的解决方案感兴趣。由于它并不真正适合任何其他答案的对话,我不知道我会在哪里发表评论。
        【解决方案9】:

        当我的 Ubuntu 上的根驱动器 (/dev/sda1) 损坏时,我得到了这个。

        重新启动,收到错误/dev/sda1 contains a file system with errors

        按照此处的说明进行操作:https://askubuntu.com/questions/885062/root-file-system-requires-manual-fsck,即 fsck -y <dev/xxx reported to have error>两次。然后exit 重启。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2015-05-15
          • 1970-01-01
          • 2010-09-07
          • 1970-01-01
          • 2021-02-22
          • 2015-08-01
          • 1970-01-01
          相关资源
          最近更新 更多