2014-11-20 2 views
0

У меня есть сценарий python (ниже), который не дает точных результатов. Я уверен, что что-то испортил, но не могу понять. Буду признателен за любые материалы или советы.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 ТБ в размере с 23,3 ТБ доступного

Любой вход или совет были бы оценены ,

Спасибо! Терри

+2

Почему вы разделив на 1024 5 раз в 'float' линии? 1 TiB - '1024 ** 4' байт, а не' 1024 ** 5'. –

+0

Возможно, вы имеете в виду «Осталось»? –

+0

gnibbler - я ошибся Оставшийся - спасибо, что указали это. Я намеревался использовать. –

ответ

0

Tb = кб * кб * кб * кб

Вы используете 5 делений на 1024, которые будут выражать байты как петабайт вместо терабайт.

лучше использовать функцию преобразования:

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

Спасибо и топленые сверху. Я немного взволновал типизацию 1024-х. Это немного почистило его, теперь он приближается, но что-то еще не работает, так как фактический размер составляет 138 ТБ. Это то, что я получаю. всего: 16.88TB доступно: 2.85TB Подержанный 14.03TB Процент Full: 83.12% –

Смежные вопросы