Calificación:
  • 0 voto(s) - 0 Media
  • 1
  • 2
  • 3
  • 4
  • 5
PHYSICALDRIVE & VOLUMEN
#1
Question 
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!
Responder
#2
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
¡No te pierdas nuestro curso oficial en Udemy para aprender Python, bases de datos SQL, orientación a objetos, tkinter y mucho más!

También ofrecemos consultoría profesional de desarrollo en Python para personas y empresas.
Responder
#3
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


Archivos adjuntos Miniatura(s)
   
Responder
#4
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
¡No te pierdas nuestro curso oficial en Udemy para aprender Python, bases de datos SQL, orientación a objetos, tkinter y mucho más!

También ofrecemos consultoría profesional de desarrollo en Python para personas y empresas.
Responder
#5
Gracias Francisco. Seguiré esa línea de investigación.
Responder


Salto de foro:


Usuarios navegando en este tema: 1 invitado(s)