首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >查找包含给定文件的文件系统的大小和可用空间

查找包含给定文件的文件系统的大小和可用空间
EN

Stack Overflow用户
提问于 2010-11-24 03:42:49
回答 12查看 135.4K关注 0票数 80

我在Linux上使用Python 2.6。最快的方法是什么:

使用

  • 来确定哪个分区包含给定的目录或文件?

例如,假设/dev/sda2挂载在/home上,/dev/mapper/foo挂载在/home/foo上。然后,我想从字符串("/dev/mapper/foo", "home/foo").

  • and中恢复对"/home/foo/bar/baz",以获取给定分区的使用统计信息?例如,给定/dev/mapper/foo,我想要获取分区的大小和可用空间(以字节为单位或大约以to为单位)。
EN

回答 12

Stack Overflow用户

回答已采纳

发布于 2010-11-24 03:53:46

如果您只需要设备上的可用空间,请使用下面的os.statvfs()查看答案。

如果您还需要与文件关联的设备名称和挂载点,则应调用外部程序来获取此信息。df将提供您需要的所有信息--当被称为df filename时,它会打印一行关于包含该文件的分区的信息。

举个例子:

代码语言:javascript
复制
import subprocess
df = subprocess.Popen(["df", "filename"], stdout=subprocess.PIPE)
output = df.communicate()[0]
device, size, used, available, percent, mountpoint = \
    output.split("\n")[1].split()

注意,这是相当脆弱的,因为它依赖于df输出的确切格式,但我不知道有更健壮的解决方案。(下面有一些依赖于/proc文件系统的解决方案,它们的可移植性甚至比这个还要差。)

票数 50
EN

Stack Overflow用户

发布于 2012-09-08 11:56:26

这不会给出分区的名称,但是您可以使用statvfs Unix系统调用直接获取文件系统统计信息。要在Python中调用它,请使用os.statvfs('/home/foo/bar/baz')

结果中的相关字段according to POSIX

无符号长f_frsize基本文件系统数据块大小。fsblkcnt_t f_blocks文件系统上的数据块总数,以f_frsize为单位。fsblkcnt_t f_bfree可用块总数。fsblkcnt_t f_bavail可供非特权进程使用的空闲块数量。

因此,要理解这些值,请乘以f_frsize

代码语言:javascript
复制
import os
statvfs = os.statvfs('/home/foo/bar/baz')

statvfs.f_frsize * statvfs.f_blocks     # Size of filesystem in bytes
statvfs.f_frsize * statvfs.f_bfree      # Actual number of free bytes
statvfs.f_frsize * statvfs.f_bavail     # Number of free bytes that ordinary users
                                        # are allowed to use (excl. reserved space)
票数 129
EN

Stack Overflow用户

发布于 2016-10-01 04:39:44

从Python3.3开始,有一种简单而直接的方法可以使用标准库来实现这一点:

代码语言:javascript
复制
$ cat free_space.py 
#!/usr/bin/env python3

import shutil

total, used, free = shutil.disk_usage(__file__)
print(total, used, free)

$ ./free_space.py 
1007870246912 460794834944 495854989312

这些数字以字节为单位。有关详细信息,请参阅the documentation

票数 37
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4260116

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档