Frage

Ich suche nach der Anzahl der freien Bytes auf meinem HD, aber Schwierigkeiten haben dabei auf Python.

Ich habe versucht, die folgenden:

import os

stat = os.statvfs(path)
print stat.f_bsize * stat.f_bavail

Aber auf OS / X Es gibt mir ein 17529020874752 Bytes, die etwa 1,6 TB, die sehr schön wäre, aber leider nicht wirklich wahr.

Was ist der beste Weg, um diese Figur zu bekommen?

War es hilfreich?

Lösung

Versuchen f_frsize statt f_bsize verwendet wird.

>>> s = os.statvfs('/')
>>> (s.f_bavail * s.f_frsize) / 1024
23836592L
>>> os.system('df -k /')
Filesystem   1024-blocks     Used Available Capacity  Mounted on
/dev/disk0s2   116884912 92792320  23836592    80%    /

Andere Tipps

Unter UNIX:

import os
from collections import namedtuple

_ntuple_diskusage = namedtuple('usage', 'total used free')

def disk_usage(path):
    """Return disk usage statistics about the given path.

    Returned valus is a named tuple with attributes 'total', 'used' and
    'free', which are the amount of total, used and free space, in bytes.
    """
    st = os.statvfs(path)
    free = st.f_bavail * st.f_frsize
    total = st.f_blocks * st.f_frsize
    used = (st.f_blocks - st.f_bfree) * st.f_frsize
    return _ntuple_diskusage(total, used, free)

Verbrauch:

>>> disk_usage('/')
usage(total=21378641920, used=7650934784, free=12641718272)
>>>

Für Windows können Sie verwenden psutil .

In Python 3.3 und oben shutil bietet Ihnen die gleiche Funktion

>>> import shutil
>>> shutil.disk_usage("/")
usage(total=488008343552, used=202575314944, free=260620050432)
>>> 

Psutil Modul auch verwendet werden kann.

>>> psutil.disk_usage('/')
usage(total=21378641920, used=4809781248, free=15482871808, percent=22.5)

können Dokumentation hier .

def FreeSpace(drive):
    """ Return the FreeSape of a shared drive in bytes"""
    try:
        fso = com.Dispatch("Scripting.FileSystemObject")
        drv = fso.GetDrive(drive)
        return drv.FreeSpace
    except:
        return 0

Es ist nicht betriebssystemunabhängig, aber das funktioniert unter Linux, und wahrscheinlich auf OS X als auch:

Drucken commands.getoutput ( 'df.). Split ( '\ n') [1] .split () [3]

Wie funktioniert es? Es wird die Ausgabe des ‚df.‘ Befehl, mit dem Sie Platteninformationen über die Teilung von denen gibt das aktuelle Verzeichnis ein Teil ist, teilt es sich in zwei Leitungen (so wie es auf dem Bildschirm ausgegeben wird), nimmt dann die zweite Zeile, dass (durch Anhängen von [1] nach dem erstes split ()), dann teilt , die Linie in verschiedenen Leerzeichen getrennte Stücke, und schließlich gibt Ihnen das vierte Element in dieser Liste.

>>> commands.getoutput('df .')
'Filesystem           1K-blocks      Used Available Use% Mounted on\n/dev/sda3             80416836  61324872  15039168  81% /'

>>> commands.getoutput('df .').split('\n')
['Filesystem           1K-blocks      Used Available Use% Mounted on', '/dev/sda3             80416836  61324908  15039132  81% /']

>>> commands.getoutput('df .').split('\n')[1]
'/dev/sda3             80416836  61324908  15039132  81% /'

>>> commands.getoutput('df .').split('\n')[1].split()
['/dev/sda3', '80416836', '61324912', '15039128', '81%', '/']

>>> commands.getoutput('df .').split('\n')[1].split()[3]
'15039128'

>>> print commands.getoutput('df .').split('\n')[1].split()[3]
15039128

Was ist los mit

import subprocess
proc= subprocess.Popen( "df", stdout=subprocess.PIPE )
proc.stdout.read()
proc.wait()
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top