用于确定可用空间的Python脚本提供了不准确的结果

用于确定可用空间的Python脚本提供了不准确的结果,python,linux,Python,Linux,我下面有一个python脚本,它没有提供准确的结果。我肯定我把事情搞砸了,但似乎想不出来。如有任何意见或建议,我将不胜感激 脚本的目的是报告特定装载点上总磁盘空间的剩余百分比 #!/usr/bin/python import os disk = os.statvfs("/Volumes/Promotions/") totalBytes = float(disk.f_bsize*disk.f_blocks) totalUsedSpace = float(disk.f_bsize*(disk

我下面有一个python脚本,它没有提供准确的结果。我肯定我把事情搞砸了,但似乎想不出来。如有任何意见或建议,我将不胜感激

脚本的目的是报告特定装载点上总磁盘空间的剩余百分比

#!/usr/bin/python 
import os 
disk = os.statvfs("/Volumes/Promotions/") 
totalBytes = float(disk.f_bsize*disk.f_blocks) 
totalUsedSpace = float(disk.f_bsize*(disk.f_blocks-disk.f_bfree)) 
totalAvailSpace = float(disk.f_bsize*disk.f_bfree) 
used = float(totalUsedSpace/1024/1024/1024/1024/1024) 
avail = float (totalAvailSpace/1024/1024/1024/1024/1024) 
total = float (totalBytes/1024/1024/1024/1024/1024) 
percent = ((used)/(total)*100)

import smtplib

SERVER = "webmail.****.com"

FROM = "***@***.com" TO = ["***@***.com"] # must be a list

SUBJECT = "Hello!"

TEXT = "Total Available Remaining Percent Full\n" "%.2fTB" % (total) + " " "%.2fTB" % (avail) + " " "%.2fTB" % (used) + " " "%.2f%%" % (percent)

# Prepare actual message

message = """\ 
From: %s 
To: %s 
Subject: %s

%s """ % (FROM, ", ".join(TO), SUBJECT, TEXT)

# Send the mail

server = smtplib.SMTP(SERVER) 
server.sendmail(FROM, TO, message) 
server.quit()
以上发送以下内容的输出:

Total 0.2TB Available 0.00TB  Remaining 0.01TB  Percent Full 83.12%
问题是上面的路径实际大小为138 TB,可用容量为23.3 TB

如有任何意见或建议,将不胜感激

谢谢大家!! 特里

Tb=kb*kb*kb*kb

您使用的是5个除以1024的分区,将字节表示为PB,而不是TB

更好地使用转换功能:

def asTb(numberOfBytes):
  TB = 1024**4
  return numberOfBytes / TB

为什么在浮点数行中要除以1024 5次?1 TiB是1024**4字节,不是1024**5字节。你确定你的意思是剩余吗?gnibbler-我输入了剩余-谢谢你指出这一点。我打算将used.As作为注释:os.statvfs已被弃用,并在Python3中删除。因为这个函数只在Linux或OSX上工作,所以您应该考虑使用子进程和UNIX DF。这将大大简化你的生活。谢谢你,还有上面的提示。很明显,我有点兴奋。这已经清理了一点,它现在显示更近,但有些东西仍然是关闭的,因为实际大小是138TB-这是我得到的。总计:16.88 TB可用容量:2.85 TB已使用容量14.03 TB已满容量:83.12%