我正在从事当前在 unix 平台上的项目,我们准备将该项目移植到 windows 上。
我想知道是否有与以下相同的窗口
/proc/cpuinfo
/proc/loadavg
/proc/meminfo
df -T
/proc/diskstats
我还想获取所有磁盘信息
Filesystem
Size
Serial Number
Check if volume is system volume
我尝试阅读以上信息获取卷信息函数,但我希望它是纯 Python 代码。
在 unix 中,我使用 PAM 模块进行身份验证,但它在 windows 中不可用,我没有找到(尝试过 NTLM 但不知道这是不是好方法)任何与之相当的好的方法。
严格注意:仅使用内置 API 和 Python 2.6。*
答案1
/proc
MS Windows 上不存在该文件系统。
如果你想坚持使用 Python 中的内置内容,那么你必须使用你能从中找到的内容操作系统和平台模块。
或者,您可以使用内置的ctypes模块来调用 MS Windows 的 函数Kernel32.dll
。这样,您可以提取等效信息(如果可用)。将这个特定于平台的内容封装在实用程序模块中可能是明智之举。这将读取/proc
文件或调用Kernel32.dll
函数,具体取决于 的值platform.system()
。
编辑:
要查找有关磁盘和卷(Windows 中指文件系统)的信息,请查看 MS info about本地文件系统。
我认为你可以从获取逻辑驱动器字符串, 然后获取卷信息.然后使用其他卷管理功能。
编辑2:
这是使用 ctypes 的示例。不过,我没有可用的 Windows 机器来测试它。根据文档,GetLogicalDriveStrings 的原型是:
DWORD WINAPI GetLogicalDriveStrings(
_In_ DWORD nBufferLength,
_Out_ LPTSTR lpBuffer
);
ADWORD
是 32 位无符号整数。这取决于平台,但通常c_uint
在 ctypes 中实现。LPTSTR 是指向用于存储内容的内存区域的指针。我们可以使用create_string_buffer
它来实现这一点。它应该像这样工作
import ctypes
blen = ctypes.c_uint(128)
rv = ctypes.c_uint()
bufs = ctypes.create_string_buffer(128)
rv = ctypes.windll.kernel32.GetLogicalDriveStrings(blen, bufs)
if rv.value == 0:
raise ValueError('GetLogicalDriveStrings returned 0.')
drives = bufs.raw.split('\0')
drvstring = ' '.join(drives)
print drvstring
该名称drives
现在应该引用驱动器名称列表。