Ich kann RAM-Größe in Ordnung mit ctypes
und MEMORYSTATUSEX()
bekommen, aber ich habe Probleme, etwas für die Gesamtgröße der Festplatte (nicht verfügbarer Speicherplatz, aber Gesamtkapazität im Allgemeinen) zu finden.Wie erhält man die Gesamtgröße der Festplatte unter Windows?
Antwort
hat Activestate eine recipe dafür, dass die Windows-GetDiskFreeSpaceEx
Funktion verwendet. Es schien zu funktionieren, als ich einige begrenzte Tests gemacht habe, aber es hat eine Reihe von potentiellen Problemen, so ist hier eine stark verbesserte und viel mehr kugelsichere Version, die mindestens in Python 2.7+ bis 3.x funktioniert und nur eingebaute in Modulen.
@eryksun verdient die meisten der Kredit/Schuld für die Verbesserungen, seit (s) er ist offensichtlich ein Experte auf das Thema der Verwendung von ctypes
.
import os
import collections
import ctypes
import sys
import locale
locale.setlocale(locale.LC_ALL, '') # set locale to default to get thousands separators
PULARGE_INTEGER = ctypes.POINTER(ctypes.c_ulonglong) # Pointer to large unsigned integer
kernel32 = ctypes.WinDLL('kernel32', use_last_error=True)
kernel32.GetDiskFreeSpaceExW.argtypes = (ctypes.c_wchar_p,) + (PULARGE_INTEGER,) * 3
class UsageTuple(collections.namedtuple('UsageTuple', 'total, used, free')):
def __str__(self):
# Add thousands separator to numbers displayed
return self.__class__.__name__ + '(total={:n}, used={:n}, free={:n})'.format(*self)
def disk_usage(path):
if sys.version_info < (3,): # Python 2?
saved_conversion_mode = ctypes.set_conversion_mode('mbcs', 'strict')
else:
try:
path = os.fsdecode(path) # allows str or bytes (or os.PathLike in Python 3.6+)
except AttributeError: # fsdecode() not added until Python 3.2
pass
# Define variables to receive results when passed as "by reference" arguments
_, total, free = ctypes.c_ulonglong(), ctypes.c_ulonglong(), ctypes.c_ulonglong()
success = kernel32.GetDiskFreeSpaceExW(
path, ctypes.byref(_), ctypes.byref(total), ctypes.byref(free))
if not success:
error_code = ctypes.get_last_error()
if sys.version_info < (3,): # Python 2?
ctypes.set_conversion_mode(*saved_conversion_mode) # restore conversion mode
if not success:
windows_error_message = ctypes.FormatError(error_code)
raise ctypes.WinError(error_code, '{} {!r}'.format(windows_error_message, path))
used = total.value - free.value
return UsageTuple(total.value, used, free.value)
if __name__ == '__main__':
print(disk_usage('C:/'))
Beispielausgabe:
UsageTuple(total=102,025,392,128, used=66,308,366,336, free=35,717,025,792)
Dann sollten Sie diesen Code verwenden.
import win32com.client as com
def TotalSize(drive):
""" Return the TotalSize of a shared drive [GB]"""
try:
fso = com.Dispatch("Scripting.FileSystemObject")
drv = fso.GetDrive(drive)
return drv.TotalSize/2**30
except:
return 0
def FreeSpace(drive):
""" Return the FreeSape of a shared drive [GB]"""
try:
fso = com.Dispatch("Scripting.FileSystemObject")
drv = fso.GetDrive(drive)
return drv.FreeSpace/2**30
except:
return 0
drive = r'C:'
print 'TotalSize of %s = %d GB' % (drive, TotalSize(drive))
print 'FreeSapce on %s = %d GB' % (drive, FreeSapce(drive))
Gibt 0 auf Python3 zurück – AlwaysQuestioning
- 1. Get Gesamtgröße einer Festplatte in C++ Windows
- 2. Wie erhält man die VHD einer verwalteten Azure-Festplatte?
- 3. Wie erhält man Thread-Stack-Informationen unter Windows?
- 4. Wie erhält man nur die Prozess-ID, die auf einem bestimmten Port unter Windows ausgeführt wird?
- 5. Wie die Gesamtgröße bestimmter Dateien in Linux
- 6. Wie erhält man den Windows-Benutzernamen?
- 7. Wie erhält man den Benutzernamen des Benutzers, der eine Anwendung unter Windows deinstalliert hat?
- 8. Ermitteln der Plattengeometrie unter Windows
- 9. Wie erhält man die Größe des Zeichnungsbereichs eines Windows Forms?
- 10. Wie erhält man die Useragent-Zeichenfolge eines Windows Phone 7?
- 11. Wie erhält man die Breite der Benachrichtigungsinhaltserweiterung?
- 12. Wie erhält man die Anzahl der Aufzählungen?
- 13. Ermitteln der Gesamtgröße einer Liste von Dateien unter UNIX
- 14. Wie durchläuft man eine Datei und schreibt sie mit einer Windows-Batchdatei auf die Festplatte?
- 15. Wie kann man die Gesamtgröße des Arbeitsspeichers eines Computers ermitteln?
- 16. Wie man jigdo unter Windows 10 ausführt
- 17. Wie installiert man Ant-Contrib unter Windows?
- 18. Wie installiert man Compass unter Windows
- 19. Wie bekomme ich die Gesamtgröße von HttpServletResponse
- 20. Gesamtgröße der Datei in Bytes
- 21. Berechnen der Gesamtgröße aller Dateien
- 22. Wie überwacht man MySQL-Abfragen unter Windows
- 23. Wie installiert man PyBluez unter Windows 8.1?
- 24. Neu bei GitHub, wie man die Befehle unter Windows ausführt?
- 25. Wie installiert man Hbase unter Windows 7
- 26. Wie erhält man die Koordinaten der Ansicht während der Animation?
- 27. Flash ProgressEvent zeigt nicht die Gesamtgröße
- 28. Wie erhält man die Höhe eines DIV unter Berücksichtigung der Ränder des inneren Elements?
- 29. Windows Azure Extra Kleine Instanz Festplatte Größe
- 30. msbuild Aufruf Powershell-Skript unter Windows 7 erhält Signing-Fehler
Ich glaube, Sie Antwort finden Sie [hier] (https://stackoverflow.com/a/276934/5805982) –
@LexHobbit Das ist für RAM (Arbeitsspeicher) ist , nicht disk. – AlwaysQuestioning
Oh, sorry U hat schon darüber geschrieben =) –