Foros Python

Versión completa: PHYSICALDRIVE & VOLUMEN
Actualmente estas viendo una versión simplificada de nuestro contenido. Ver la versión completa con el formato correcto.
Tengo instalados dos discos: PHYSICALDRIVE0 y PHYSICALDRIVE1
Mi unidad "C:" (la del SO) se encuentra en el PHYSICALDRIVE1

Logro averiguar ambos datos por separado, pero no encuentro el modo de correlacionarlos a través del uso de algún módulo (os, sys, psutil o algún otro). Es decir, deseo conocer sobre cuál de los discos físicos se encuentra instalado el SO en cualquier equipo con Windows.

Muchas gracias!
Hola. Se me ocurre que podés expandir la variable %windir%. Por ejemplo:

Código:
>>> os.path.expandvars("%windir%")
'C:\Windows'

Eso ya te da la pauta de en qué unidad está instalado Windows. Podés quedarte solo con esa parte combinándolo con el módulo pathlib:

Código:
>>> import pathlib
>>> windir = pathlib.Path(os.path.expandvars("%windir%"))
>>> windir.drive
'C:'

Saludos
Hola Francisco, ante todo gracias por responder.

Hasta ahí no tengo problema, el punto es saber en qué disco físico está esa partición con el volúmen C:, si en el PHYSICALDRIVE0, en el PHYSICALDRIVE1, ..., o en el PHYSICALDRIVEn

Te adjunto una imagen ilustrativa. En ella el volumen C: está en el disco 1 (y no en el disco 0 como podría suponerse...)

Saludos
Bien, encontré este código en StackOverflow, algo parecido a lo que vos buscás, que reconstruyéndolo un poco podría quedar así:

Código:
import wmi

w = wmi.WMI()
all_logical_disks = {}
key = ""
for physical_disk in w.Win32_DiskDrive():
    logical_disks = []
    for partition in physical_disk.associators("Win32_DiskDriveToDiskPartition"):
        for logical_disk in partition.associators("Win32_LogicalDiskToPartition"):
            key = logical_disk.Description
            if key not in all_logical_disks:
                all_logical_disks[key] = []
            logical_disks.append(logical_disk.Caption)
    if logical_disks:
        all_logical_disks[key].append(logical_disks)
print(all_logical_disks)

(Necesita el módulo WMI, se instala vía pip install WMI).

En mi caso imprime lo siguiente porque solo tengo un disco:

Código:
{'Disco fijo local': [['E:', 'C:']]}

Acá tenés la referencia sobre la estructura Win32_DiskDrive que está recorriendo: https://docs.microsoft.com/en-us/windows...-diskdrive.

Saludos
Gracias Francisco. Seguiré esa línea de investigación.