如何在Python中获取挂载设备的名称

3
在我的Mac上,我已经将一个SMB共享映射为卷。我想在我的Python代码中获取这个卷的真实路径。
➜  MYVOLUME pwd
/Volumes/MYVOLUME
➜  MYVOLUME mount
/dev/disk1s1 on / (apfs, local, journaled)
devfs on /dev (devfs, local, nobrowse)
/dev/disk1s4 on /private/var/vm (apfs, local, noexec, journaled, noatime, nobrowse)
map -hosts on /net (autofs, nosuid, automounted, nobrowse)
map auto_home on /home (autofs, automounted, nobrowse)
//fistname.lastname@10.10.50.20/Projects/SomeProject on /Volumes/MYVOLUME (smbfs, nodev, nosuid, mounted by user)

我想获取//fistname.lastname@10.10.50.20/Projects/SomeProject这一部分。我尝试使用下面的方法,但它并没有得到我想要的实际SMB位置。
def find_mount_point(self,path):
    path = os.path.abspath(path)
    while not os.path.ismount(path):
        path = os.path.dirname(path)
    return path  

1
那根本不是一个路径,而是一个设备名称。 - Davis Herring
https://dev59.com/JG855IYBdhLWcg3wPB36 的答案的第一部分加上 @DavisHerring 的评论再加上 https://dev59.com/RV8e5IYBdhLWcg3wFnLm 应该能给你答案。 - PilouPili
@NPE 太好了。这个方法有效!psutil.disk_partitions(all=True)就是解决办法。如果你想把你的评论改成答案,我很乐意接受。 - Omnipresent
如果我将这个答案标记为重复,你会不会感到冒犯? - PilouPili
看起来这不是一个重复的问题,所以我发表了一个答案。 - PilouPili
1个回答

3
您可以使用psutil库。
工作示例:
def find_sdiskpart(path):
    path = os.path.abspath(path)
    while not os.path.ismount(path):
        path = os.path.dirname(path)
    p = [p for p in psutil.disk_partitions(all=True) if p.mountpoint == path.__str__()]
    l = len(p)
    if len(p) == 1:
        print type(p[0])
        return p[0]
    raise psutil.Error

该函数将返回一个包含挂载点和设备名称的<class 'psutil._common.sdiskpart'>

可以像这样使用

try:
    p = find_sdiskpart(".")
    print p.mountpoint
    print p.device
except psutil.Error:
    print 'strange'

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接