Кросс-платформенный способ Python и список дисков в Linux, Windows и Mac - PullRequest
9 голосов
/ 30 августа 2010

Я пытаюсь перечислить диски, которые может иметь система.

В Windows это может быть что-то вроде «C: /», «D: /», «E: /».

В Linux это может быть что-то вроде «/ boot», "/ media / SDCard" и т. д.

И я не знаю, как это на Mac.Может быть, что-то в /Volumes.

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

Спасибо!

О: короткая заметка, я использую Python 2.6.

Ответы [ 4 ]

13 голосов
/ 11 сентября 2014

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

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')]
2 голосов
/ 30 августа 2010

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

  1. То, что / Thomas / O соответствует / dev / sdf1
  2. Что / dev / sdf1 может иметь файловую систему FAT32
  3. То, что / dev / sdf , а не предпочтительнее, чем / dev / sdf1

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

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

1 голос
/ 16 апреля 2015

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

from os import listdir
listdir('/Volumes')

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

0 голосов
/ 07 марта 2019

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

...