Freier Speicherplatz

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Zu dumm... Wenn auf dem Laufwerk keine Dateien existieren bzw. alle vorhanden versteckt sind, dann funktioniert das parsen der dir-Ausgabe nicht, weil in der Ausgabe nicht angezeigt wird, wieviel Bytes frei sind :(

Behelfen kann man sich damit, das auf NTFS-Laufwerke zumindest das versteckte "System Volume Information" Verzeichnis existiert... Somit funktioniert es wieder mit "dir c:\ /ah" (/ah = Versteckte Einträge anzeigen)...

"""alte Version gelöscht, s.u."""

Wie bekomme ich eigentlich unter Linux den freien Platz raus? Irgendwie über stat ??? Oder gibt es dafür auch keine eingebaute Funktion?
Zuletzt geändert von jens am Donnerstag 3. März 2005, 15:25, insgesamt 1-mal geändert.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

jens hat geschrieben:Wie bekomme ich eigentlich unter Linux den freien Platz raus? Irgendwie über stat ??? Oder gibt es dafür auch keine eingebaute Funktion?
Jup, doch das gibt es:

Code: Alles auswählen

import os, statvfs
fsstat = os.statvfs('/')
blocks_free = fsstat[statvfs.F_BAVAIL]
block_size = fsstat[statvfs.F_BSIZE]
free = block_size * blocks_free
print 'MB auf / frei:', free/1024/1024
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Thx! Hab es angepasst:

Code: Alles auswählen

def getFreeSpace( Drive ):
    "Liefert den freien Speicherplatz in Bytes eines Laufwerks/mountpoints zurück"
    if sys.platform == "win32":
        # Benutze DIR-Ausgabe um freinen Speicherplatz zu ermitteln
        ## Wenn auf dem Laufwerk keine Dateien existieren bzw. alle vorhanden versteckt
        ## sind, dann funktioniert das parsen der dir-Ausgabe nicht, weil in der Ausgabe
        ## nicht angezeigt wird, wieviel Bytes frei sind.
        txt = os.popen( 'dir %s\\ /ah' % Drive ).readlines()
        txt = txt[-1]
        txt = txt.split(",")[1]
        txt = txt.split("Bytes")[0]
        txt = "".join( txt.split(".") )
        return int( txt )
    elif sys.platform == "posix":
        # Unter Linux ist alles einfacher ;)
        import statvfs
        fsstat = os.statvfs( Drive )
        blocks_free = fsstat[statvfs.F_BAVAIL]
        block_size = fsstat[statvfs.F_BSIZE]
        return blocks_free * block_size
    raise "Platform not supported ;("
BlackJack

Dein Windows-Anteil funktioniert aber nur unter einem deutschen Windows, oder zumindest eines, wo in der entsprechenden Zeile "Bytes" gross geschrieben wird und Tausender mit '.' getrennt werden. Bei einem eglischen ``dir`` sieht die letzte Zeile zum Beispiel so aus:

Code: Alles auswählen

        13 dir(s)   2,147,450,880 bytes free
Antworten