gpt4 book ai didi

python - 如何在 Windows 上获取总磁盘大小?

转载 作者:行者123 更新时间:2023-12-05 09:18:20 26 4
gpt4 key购买 nike

我可以使用 ctypesMEMORYSTATUSEX() 获得 RAM 大小,但我无法找到总磁盘大小(不是可用空间,而是总容量)一般而言)。

最佳答案

ActiveState 有一个 recipe为此,使用 Windows GetDiskFreeSpaceEx功能。当我做了一些有限的测试时它似乎可以工作,但是它有很多潜在的问题,所以这里有一个大大改进和更可靠的版本,至少在 Python 2.7+ 到 3.x 中工作)并且只使用内置 -在模块中。

@Eryk Sun 应该为增强功能获得大部分荣誉/指责,因为他显然是使用 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:/'))

示例输出:

UsageTuple(total=102,025,392,128, used=66,308,366,336, free=35,717,025,792)

关于python - 如何在 Windows 上获取总磁盘大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44873908/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com