Unix para o equivalente do Windows

1

Estou trabalhando em um projeto que está atualmente em plataforma unix e vamos portar esse projeto no windows.

Eu quero saber se há alguma janela equivalente a seguir

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

Eu também quero obter todas as informações do disco

Filesystem
Size
Serial Number
Check if volume is system volume

Eu tentei ler as informações acima GetVolumeInformation função, mas eu quero que ele esteja em código Python puro.

No unix para autenticação eu usei o módulo PAM, mas não está disponível no Windows Eu não acho (tentei NTLM mas donno é bom caminho) qualquer bom equivalente a ele.

Nota estrita: Use apenas APIs inbuild e Python 2.6. *

    
por Vishakha Ingole 27.02.2014 / 07:58

1 resposta

1

O sistema de arquivos /proc não existe nas janelas do MS.

Se você quiser se ater ao material embutido em Python, você terá que fazer com o que você pode encontrar no os e módulos da plataforma .

Como alternativa, você pode usar o módulo interno ctypes para chamar funções do MS Windows '% código%. Dessa forma, você pode extrair informações equivalentes, se disponíveis. Provavelmente seria sensato encapsular este material específico da plataforma em um módulo utilitário. Isso poderia ler Kernel32.dll arquivos ou chamar /proc funções dependendo do valor de, por exemplo, Kernel32.dll .

Editar :

Para encontrar informações sobre discos e volumes (janelas para sistemas de arquivos), consulte as informações do MS sobre sistemas de arquivos locais .

Eu diria que você poderia começar com GetLogicalDriveStrings , depois GetVolumeInformation . Em seguida, use outras funções de gerenciamento de volume .

Edit2:

Este é um exemplo de uso de ctypes. Eu não tenho uma máquina Windows disponível para testá-lo, no entanto. De acordo com os documentos, o protótipo de GetLogicalDriveStrings é:

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

Um platform.system() é um int não assinado de 32 bits. Depende da plataforma, mas isso é normalmente feito com DWORD em ctypes. Um LPTSTR é um ponteiro para uma área de memória para armazenar coisas. Podemos usar c_uint para fazer isso. Deve funcionar algo assim

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('
DWORD WINAPI GetLogicalDriveStrings(
  _In_   DWORD nBufferLength,
  _Out_  LPTSTR lpBuffer
);
') drvstring = ' '.join(drives) print drvstring

O nome create_string_buffer deve agora referenciar uma lista de nomes de unidades.

    
por 01.03.2014 / 11:51