2010-08-29 10 views
8

Estoy tratando de enumerar las unidades de disco que un sistema puede tener.Forma de la plataforma Python y Cross para listar unidades de disco en Linux, Windows y Mac

En Windows, puede ser algo como "C: /", "D: /", "E: /".

En Linux, puede ser algo como "/ boot", "/ media/tarjeta SD", etc.

Y no sé lo que se siente en un Mac. Tal vez algo debajo/Volumes.

¿Alguien sabe de una plataforma cruzada (es decir, una que funciona en Linux, Windows y Mac) en Python?

Gracias!

Oh: una nota rápida, estoy ejecutando Python 2.6.

+0

¿Cuál es el resultado final que desea lograr con esto? –

+0

Estoy creando una interfaz para que los usuarios seleccionen las unidades de disco conectadas a la computadora. Necesitará conocer el espacio disponible en las unidades y tener la capacidad de formatearlas con los sistemas de archivos FAT32 (tal vez) y poder acceder a los archivos. –

+0

sugerencia: anule la selección para que funcione con lo que tiene acceso, haga que funcione y luego haga la selección de dispositivo comparativamente más fácil. Y tenga cuidado con formatear, en caso de que eso no sea necesario. – msw

Respuesta

2

No existe realmente un esquema de nombres unificado para dispositivos Linux que le garantice un dispositivo de bloques formatable. Hay convenciones, pero pueden variar ampliamente y pueden llamar a mi pulgar unidad/Thomas/O si quiero y no hay manera de plataforma cruzada en Python saber:

  1. Eso/Thomas/S corresponde a/dev/sdf1
  2. que/dev/sdf1 pueden tener un sistema de archivos FAT32 definido en ella
  3. que/dev/sdf es no prefirieron/dev/sdf1

estoy bastante seguro de que tampoco hay un módulo de Python multiplataforma que le permita determinar que H:/está formateado capaz en un sistema Windows pero que Z:/no lo es.

Cada sistema requerirá sus propias comprobaciones y validaciones específicas que usted podría aprender mejor estudiando el software de manipulación de disco de código abierto.

+0

Estaba pensando en cómo lo hace un programa como gparted.Pero, eso no es multiplataforma, solo Unix (o incluso Linux), ¿verdad? Las unidades no tienen necesariamente que ser formateables. Solo, deberían estar adjuntos o medios internos. Como en su mayoría estoy tratando con tarjetas SD, solo estoy listando/medios en Linux,/Volumes en Mac y todas las unidades de disco (C: /, D:/etc.) en Windows. –

+0

No lo ponderes, no lo robes. Me refiero a las ideas, pero también a la fuente, a menos que te guste reinventar las ruedas. http://sourceforge.net/projects/gparted/files/gparted/ – msw

+0

Y no hay ninguna garantía de que los medios incluso existirán en Linux o que se montará un disco sin formato para que lo vea. Incluso NT/Vista/7 permite montar un dispositivo en un directorio arbitrario de la manera Unixy. – msw

11

El paquete psutil (https://pypi.python.org/pypi/psutil) tiene una función disk_partitions.

de Windows:

>>> import psutil 
>>> psutil.disk_partitions() 
[sdiskpart(device='C:\\', mountpoint='C:\\', fstype='NTFS', opts='rw,fixed'), sdiskpart(device='D:\\', mountpoint='D:\\', fstype='NTFS', opts='rw,fixed'), sdiskpart(device='E:\\', mountpoint='E:\\', fstype='', opts='cdrom'), sdiskpart(device='F:\\', mountpoint='F:\\', fstype='NTFS', opts='rw,fixed')] 

Linux:

>>> import psutil 
>>> psutil.disk_partitions() 
[sdiskpart(device='/dev/sda1', mountpoint='/', fstype='ext4', opts='rw,errors=remount-ro'), sdiskpart(device='/dev/sr0', mountpoint='/media/VBOXADDITIONS_4.3.10_93012', fstype='iso9660', opts='ro,nosuid,nodev,uid=1000,gid=1000,iocharset=utf8,mode=0400,dmode=0500,uhelper=udisks')] 
+0

En OS X, mi unidad tiene un nombre que aparece en Finder (Macintosh HD ... estoy bastante seguro de que este es el nombre predeterminado.) Alguna idea de cómo podría encontrar ese nombre, porque esto es lo que aparece .. . 'sdiskpart (dispositivo = '/ dev/disk0s2', mountpoint = '/', fstype = 'hfs', opts = 'rw, local, rootfs, dovolfs, journaled, multilabel')'. – ArtOfWarfare

+0

No conozco bien el SO X, pero sospecho que esa sería la etiqueta del disco. Tal vez una llamada a [disklabel] (https://developer.apple.com/library/mac/documentation/Darwin/Reference/ManPages/man8/disklabel.8.html)? –

1

Eric Smith's answer to use psutil funciona bien para mí en Windows, pero en OS X, yo prefiero esto:

from os import listdir 
listdir('/Volumes') 

que le da la espalda los nombres legibles para humanos que, al menos en mi caso, serían preferibles (IE, te da Macintosh HD lugar de / o /dev/disk0s2.)

+0

Obtenga el atributo 'punto de montaje' de la tupla nombrada devuelta por psutil para obtener el nombre legible para humanos – Debjit

+0

@Debjit - No. En OS X que devuelve '/' en lugar de 'Macintosh HD' – ArtOfWarfare

Cuestiones relacionadas