Unix 与 Windows 等效

Unix 与 Windows 等效

我正在从事当前在 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

/procMS 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现在应该引用驱动器名称列表。

相关内容