1

Я работаю над проектом, который в настоящее время работает на платформе Unix, и мы собираемся перенести этот проект на Windows.

Я хочу знать, есть ли какие-либо окна, эквивалентные следующим

/proc/cpuinfo 
/proc/loadavg     
/proc/meminfo     
df -T             
/proc/diskstats 

Я также хочу получить всю информацию о диске

Filesystem
Size
Serial Number
Check if volume is system volume

Я попытался прочитать вышеупомянутую информацию функции GetVolumeInformation, но я хочу, чтобы она была в чистом коде Python.

В Unix для аутентификации я использовал модуль PAM, но его нет в окнах, которые я не нахожу (пробовал NTLM, но это не лучший способ), но не является его эквивалентом.

Строгое примечание: используйте только встроенные API и Python 2.6.*

1 ответ1

1

Файловая система /proc не существует в MS Windows.

Если вы хотите придерживаться встроенных вещей в Python, вам придется ознакомиться с тем, что вы можете найти из модулей OS и платформы .

Кроме того, вы можете использовать встроенный модуль ctypes для вызова функций из Kernel32.dll из MS Windows. Таким образом, вы можете извлечь эквивалентную информацию, если таковая имеется. Вероятно, было бы целесообразно инкапсулировать эту специфическую для платформы информацию в служебном модуле. Это будет либо читать файлы /proc либо вызывать функции Kernel32.dll зависимости от значения, например, platform.system() .

Редактировать:

Для поиска информации о дисках и томах (Windows-говорят для файловых систем) посмотрите MS информацию о локальных файловых системах.

Я бы сказал, что вы можете начать с GetLogicalDriveStrings, затем GetVolumeInformation. Затем используйте другие функции управления громкостью.

Edit2:

Это пример использования ctypes. У меня нет машины с Windows, чтобы протестировать ее. Согласно документации, прототип для GetLogicalDriveStrings:

DWORD WINAPI GetLogicalDriveStrings(
  _In_   DWORD nBufferLength,
  _Out_  LPTSTR lpBuffer
);

DWORD - это 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 теперь должно ссылаться на список имен дисков.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .