Seite 2 von 2

Verfasst: Donnerstag 3. März 2005, 08:14
von jens
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?

Verfasst: Donnerstag 3. März 2005, 13:49
von Leonidas
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

Verfasst: Donnerstag 3. März 2005, 15:22
von jens
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 ;("

Verfasst: Freitag 4. März 2005, 00:59
von 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