我正在使用 shutil.disk_usage() 函数来查找特定路径的当前磁盘使用情况(可用数量、已使用等)。据我所知,这是 os.statvfs() 调用的包装器。与 Linux 中“du”的输出相比,我发现它没有给出我期望的答案。
出于公司隐私的原因,我遮盖了下面的一些路径,但输出和代码在其他方面没有被篡改。我正在使用 Python 3.3.2 64 位版本。
#!/apps/python/3.3.2_64bit/bin/python3
# test of shutils.diskusage module
import shutil
BytesPerGB = 1024 * 1024 * 1024
(total, used, free) = shutil.disk_usage("/data/foo/")
print ("Total: %.2fGB" % (float(total)/BytesPerGB))
print ("Used: %.2fGB" % (float(used)/BytesPerGB))
(total1, used1, free1) = shutil.disk_usage("/data/foo/utils/")
print ("Total: %.2fGB" % (float(total1)/BytesPerGB))
print ("Used: %.2fGB" % (float(used1)/BytesPerGB))
哪个输出:
/data/foo/drivecode/me % disk_usage_test.py
Total: 609.60GB
Used: 291.58GB
Total: 609.60GB
Used: 291.58GB
如您所见,主要问题是我希望“已使用”的第二个数量要小得多,因为它是第一个目录的子集。
/data/foo/drivecode/me % du -sh /data/foo/utils
2.0G /data/foo/utils
尽管我相信“du”,但我很难相信 Python 模块也不正确。因此,问题可能只是我对 Linux 文件系统的理解。:)
我编写了一个模块(主要基于 SO 中某人的代码),它递归地获取我一直使用的 disk_usage。它似乎与“du”输出相匹配,但比 shutil.disk_usage() 函数慢得多,所以我希望我能做到这一点。
提前非常感谢。