Seite 1 von 2

Verfasst: Donnerstag 24. Februar 2005, 15:00
von Leonidas
BlackJack hat geschrieben:Es ging nicht um eine Funktion um den freien Plattenplatz anzuzeigen, sondern um pywin32 als Modul in der Standard-Distri. Und pywin32 finde ich ist ziemlich windowsspezifisch. ;-)
Nein, ich würde das eher so sehen, dass die Speicherplatzermittlung ins C os Modul für Windows rein kommt, da braucht man auch kein pywin32, sondern das ruft halt die API Funktion direkt auf.

Verfasst: Donnerstag 24. Februar 2005, 17:27
von jens
Du hast doch da Erfahrung... Ist es möglich, nur mit den Standart Modulen, einen API Aufruf zu machen und so den Speicherplatz zu ermitteln, oder ist das ohne Zusatzmodulen nicht möglich?
Ist zwar auch sehr umständlich, aber schöner als die DIR-Ausgabe zu parsen...

Verfasst: Donnerstag 24. Februar 2005, 19:22
von Leonidas
jens hat geschrieben:Du hast doch da Erfahrung...
Wieso gerade ich? Also soo viel Erfahung habe ich auch wieder nicht.
jens hat geschrieben:Ist es möglich, nur mit den Standart Modulen, einen API Aufruf zu machen und so den Speicherplatz zu ermitteln, oder ist das ohne Zusatzmodulen nicht möglich?
Ich könnte mir denken, dass man GetFreeDiskSpaceEx irgendwie per rundll32.exe aufrufen könnte. ABer es geht auf jeden fall mit ctypes, oder mit WMI, das aber pywin32 braucht.
Hier noch eine andere Lösung... aber pywin32 oder ctypes brauchst du sowieso. Alternativ ein kleines C Wrapper Modul.
jens hat geschrieben:Ist zwar auch sehr umständlich, aber schöner als die DIR-Ausgabe zu parsen...
Durchaus.

Verfasst: Donnerstag 24. Februar 2005, 19:37
von jens
Aha ich dachte das man an DLL Geschichten schon mit Boardmitteln lösen könnte... Ansonsten, gibt es mit Sicherheit auch fertige Module, somit erübricht siche es, etwas selber zu bauen...

Naja, ich denke ich fahre mit dem DIR-Geschichte somit ganz gut :?

Verfasst: Donnerstag 24. Februar 2005, 19:49
von Leonidas
jens hat geschrieben:Aha ich dachte das man an DLL Geschichten schon mit Boardmitteln lösen könnte... Ansonsten, gibt es mit Sicherheit auch fertige Module, somit erübricht siche es, etwas selber zu bauen...
Also ein verschlanktes ctypes mitzuliefern würde ich jetzt als so tragisch empfinden.

Ist natürlich etwas doof, aber da kann man nix machen.

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