Кросс-платформенный способ составления списка дисков на Linux, Windows и Mac с использованием Python?

Я использую Python2.6. Я пытаюсь перечислить диски, которые могут быть в системе.

В Windows это может быть что-то вроде C:/, D:/, E:/ и т.д. В Linux это может быть что-то вроде /boot, /media/SDCard и т.д. И я не знаю, на что это похоже Mac. Может быть, что-то в /Volume.

Кто-нибудь знает кроссплатформенный способ (то есть тот, который работает на Linux, Windows и Mac) в Python?

Спасибо!

Ответ 1

На Linux-устройствах нет единой схемы именования, которая гарантирует вам форматируемое блочное устройство. Существуют соглашения, но они могут варьироваться в широких пределах, и я могу назвать свой флеш-накопитель/Thomas/O, если я захочу, и в Python нет кросс-платформенного способа:

  • То/Томас/О соответствует /dev/sdf 1
  • Для этого /dev/sdf 1 может быть создана файловая система FAT32
  • Это /dev/sdf не предпочтительнее /dev/sdf 1

Я уверен, что нет и кросс-платформенного модуля Python, который позволит вам определить, что H:/является форматируемым в системе Windows, но это Z:/is not.

Для каждой системы требуются собственные проверки и проверки, которые вы могли бы лучше всего изучить при изучении программного обеспечения для управления дисками с открытым исходным кодом.

Ответ 2

Пакет psutil (https://pypi.python.org/pypi/psutil) имеет функцию disk_partitions.

Окна:

>>> 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')]

Ответ 3

Ответ Эрика Смита на использование psutil хорошо работает для меня в Windows, но в OS X я предпочитаю это:

from os import listdir
listdir('/Volumes')

Это возвращает вам человекочитаемые имена, которые, по крайней мере, в моем случае, были бы предпочтительнее (IE, он дает вам Macintosh HD вместо / или /dev/disk0s2.)

Ответ 4

Я не вижу способа в psutil включить сетевые подключения в Windows. То есть, \foobar\home сопоставлен с X :, но X: не отображается в списке, возвращаемом функцией psutil.disk_partitions() (локальные диски есть).