Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Python在Linux、Windows和Mac上列出磁盘驱动器的跨平台方法?_Python_File_Cross Platform_Disk - Fatal编程技术网

使用Python在Linux、Windows和Mac上列出磁盘驱动器的跨平台方法?

使用Python在Linux、Windows和Mac上列出磁盘驱动器的跨平台方法?,python,file,cross-platform,disk,Python,File,Cross Platform,Disk,我正在使用Python2.6。我试图列出系统可能具有的磁盘驱动器 在Windows上,它可能类似于C://,D://,E://,等等。在Linux上,它可能类似于/boot,/media/SDCard,等等。我不知道在Mac上是什么样子。也许有什么不足之处 有人知道Python中的跨平台方式(即在Linux、Windows和Mac上工作的方式)吗 谢谢 Linux设备实际上没有一个统一的命名方案来保证您的块设备是可格式化的。有一些约定,但它们可以有很大的不同,如果我愿意,我可以将my thumb

我正在使用Python2.6。我试图列出系统可能具有的磁盘驱动器

在Windows上,它可能类似于
C://
D://
E://
,等等。在Linux上,它可能类似于
/boot
/media/SDCard
,等等。我不知道在Mac上是什么样子。也许有什么不足之处

有人知道Python中的跨平台方式(即在Linux、Windows和Mac上工作的方式)吗


谢谢

Linux设备实际上没有一个统一的命名方案来保证您的块设备是可格式化的。有一些约定,但它们可以有很大的不同,如果我愿意,我可以将my thumb drive/Thomas/O称为my thumb drive/Thomas/O,Python中没有跨平台的方法可以知道:

  • /Thomas/O对应于/dev/sdf1
  • /dev/sdf1可以在其上创建FAT32文件系统
  • 与/dev/sdf1相比,/dev/sdf不是首选的
  • 我很确定,也没有跨平台的Python模块可以让您确定H://在Windows系统上是可格式化的,但Z://不是

    每个系统都需要自己的特定检查和验证,您可以从研究开源磁盘操作软件中学习到这一点。

    psutil软件包()具有磁盘分区功能

    窗口:

    >>> 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')]
    
    我在Windows上工作得很好,但在OS X上,我更喜欢这样:

    from os import listdir
    listdir('/Volumes')
    

    它返回了人类可读的名称,至少在我的情况下,这是更可取的(即,它提供了
    Macintosh HD
    ,而不是
    /
    /dev/disk0s2

    我在psutil中看不到在Windows上包含网络挂载的方法。也就是说,\foobar\home被映射到X:,但是X:不出现在psutil.disk\u partitions()返回的列表中(本地驱动器是)

    更新:要在返回的列表中包括网络驱动器,只需使用:

    psutil.disk\u分区(all=True)


    非常好。

    您希望通过此操作实现什么样的最终结果?我正在构建一个界面,供用户选择连接到计算机的磁盘驱动器。它需要知道驱动器上的可用空间,并且能够使用FAT32文件系统(可能)格式化驱动器,并能够访问文件。建议:删除所选内容以使用您可以访问的内容,使其正常工作,然后进行相对简单的设备选择。在格式化时一定要小心,以防不言而喻。/etc/fstab和mount的输出是Linux端显而易见的答案。我在想像gparted这样的程序是如何做到这一点的。但是,这不是跨平台的,只有Unix(甚至Linux),对吗?驱动器不一定是可格式化的。只是,它们应该是附加的或内部媒体。因为我主要处理的是SD卡,所以我只列出Linux下的/media,Mac上的/Volumes,以及Windows上的所有磁盘驱动器(C:/,D:/等等)。别想了,去偷吧。这些想法,我的意思是,但来源也是,除非你喜欢重新发明轮子。而且根本不能保证Linux上会存在/media,或者会安装一个未格式化的驱动器供您查看。甚至NT/Vista/7也允许以Unixy方式将设备安装在任意目录上。在OS X上,我的驱动器的名称显示在Finder中(Macintosh HD…我很确定这是默认名称)。知道如何找到该名称吗,因为这就是显示的名称
    sdiskpart(device='/dev/disk0s2',mountpoint='/',fstype='hfs',opts='rw,local,rootfs,dovolfs,journaled,multilabel')
    。我不太了解OSX,但我怀疑这可能是磁盘的标签。可能是调用?此答案仅适用于已装入的磁盘从psutil返回的命名元组中设置“mountpoint”属性,以获取人类可读的磁盘name@Debjit-没有。在OS X上返回
    /
    而不是
    Macintosh HD