Pedig az irány jó akkor, csak egy dolgot hagytál ki a számításból: a python alapból egészre kerekít mindent, és nem floating point-os számítást csinál. Mutatok egy példát:
#!/usr/bin/python
import posix
fs=posix.statvfs('/tmp')
print fs.f_blocks
print fs.f_bfree
print (fs.f_blocks-fs.f_bfree)*100)/fs.f_blocks
Ennek az eredménye nálam ez:
$ /tmp/python-test.py
8052573
591448
92.0
/* Amúgy ezek a számok 4k blockok ha jól értelmezem */
Ha ezeket az értékeket átlököm a bc-nek, akkor hasonló eredményt is kapok:
$ echo "((8052573-591546)*100)/8052573" |bc
92
Viszont ha megmondom bc-nek, hogy ne kerekítsen akkor más a helyzet:
$ echo "scale=4;((8052573-591546)*100)/8052573" |bc
92.6539
df szerint meg amúgy 93%-on áll ay FS (ergo df is csal csak az kerekít, nem az egészrészt veszi)
Tehát python-ban akkor a megoldás ez lenne:
#!/usr/bin/python
import posix
fs=posix.statvfs('/tmp')
print fs.f_blocks
print fs.f_bfree
print float((fs.f_blocks-fs.f_bfree)*100)/float(fs.f_blocks)
____________________________________
Az embert 2 éven át arra tanítják hogyan álljon meg a 2 lábán, és hogyan beszéljen... Aztán azt mondják neki: -"Ülj le és kuss legyen!"..