Linux 如何在Python中找到自动装入闪存驱动器的位置?

Linux 如何在Python中找到自动装入闪存驱动器的位置?,linux,python-3.x,Linux,Python 3.x,我如何找到(在Python3.x中)默认位置,在插入我当时正在使用的计算机时,闪存驱动器会自动装入该位置?(它可以是各种非特定Linux发行版和旧/新版本中的任何一个。根据它是哪一个版本,它可能安装在/media/drivelab、/media/userName/drivelab、/mnt/drivelab等位置。) 在Ubuntu更新了默认的挂载位置以包含用户名之前,我一直满足于假设/media/driveLabel(因此,现在我不能使用静态位置来设置我在计算机上制作的便携式应用的书签文件设置

我如何找到(在Python3.x中)默认位置,在插入我当时正在使用的计算机时,闪存驱动器会自动装入该位置?(它可以是各种非特定Linux发行版和旧/新版本中的任何一个。根据它是哪一个版本,它可能安装在/media/drivelab、/media/userName/drivelab、/mnt/drivelab等位置。)

在Ubuntu更新了默认的挂载位置以包含用户名之前,我一直满足于假设/media/driveLabel(因此,现在我不能使用静态位置来设置我在计算机上制作的便携式应用的书签文件设置,因为我使用了多个用户名)。因此,每当我使用新的计算机或用户时,书签文件的路径都需要更新。请注意,硬盘上的文件也会被标记为书签(因此,这些文件不需要更改;如果您的计算机不适合它们,则将它们设置为不加载)

无论如何,如果这里有解决方案的话,现在我不满足于只使用/media挂载。如果可能的话,我更希望能够找到这个位置,而不必先挂载某些东西并找到路径的挂载位置(尽管这可能会帮助我解决引发这个问题的问题)。似乎应该对此做出一些规定,不管是用Python还是其他语言

换句话说,我希望能够知道我的闪存驱动器要安装在哪里(无驱动器标签部分)-而不是它已经安装在哪里

编辑:如果/media/username/drivelab是所有支持自动挂载的主要发行版(至少是最新版本,因为我似乎记得Ubuntu并不总是包含用户名)自动挂载的标准,请随时告诉我,因为这基本上回答了问题。或者,您可以告诉我一个特定于主要发行版的自动闪存驱动器安装位置列表。我想这可能行得通(不过如果他们改变了,我必须更新它)


仅供参考编辑:对于我的问题,我可能只会用书签保存装载位置(这样我的程序在打开书签时就知道它是书签路径的哪一部分),并在用户加载书签时用新的当前装载位置替换书签路径中的位置。

为什么不使用Udev自行强制装载位置,您只需创建一个UDEV脚本,持续监听驱动器插入,并将插入的USB驱动器映射到机器上的特定位置

为什么不使用UDEV强制自己定位,您只需创建一个UDEV脚本,不断监听驱动器插入,并将插入的USB驱动器映射到机器上的特定位置

一些linux系统不会自动挂载与它们连接的设备,如Ubuntu,但在这样的版本中,您可以在系统上四处查看以获取此信息

不幸的是,我只能在Linux CLI中回答这个问题,因为我对python了解不够

首先,您可以使用
blkid
获取设备的UUID:

$ blkid
/dev/sda1: UUID="4c58b621-59b6-4d05-a785-4671856520de" TYPE="ext4" PARTUUID="7763f5b3-01"
/dev/sda5: UUID="cf64e358-8be2-42f3-972d-70f36469279c" TYPE="swap" PARTUUID="7763f5b3-05"
/dev/sdb1: UUID="05a42322-cd8b-47e2-bc4c-612c7a577626" TYPE="ext3" PARTUUID="5893092a-01"
/dev/sdc1: UUID="64d7548d-689d-407a-9d23-68085476927a" TYPE="ext4" PARTUUID="000ced26-01"
/dev/sdc5: UUID="87cec41f-aa0b-4469-9e92-6ec549ea0b34" TYPE="swap" PARTUUID="000ced26-05"
确定哪个UUID是您的磁盘。一旦您拥有了该功能,您就可以使用
blkid
来确定您的磁盘在哪个
/dev/sd*
上:

$ blkid | awk -F":" '$2~"05a42322-cd8b-47e2-bc4c-612c7a577626" {print $1}'
/dev/sdb1
然后,您可以点击
/proc/mounts
,其中mount命令写入装载信息:

$ awk '$1~"/dev/sdb1" {print $2}' /proc/mounts
/media/sdb1
或者把这两者放在一起:

$ awk -v device=`blkid | awk -F":" '$2~"05a42322-cd8b-47e2-bc4c-612c7a577626" {print $1}'` '$1~device {print $2}' /proc/mounts
/media/sdb1

有些linux系统不会像Ubuntu那样自动挂载连接到它们的设备,但是在这样的版本中,你可以在系统中查看以获取这些信息

不幸的是,我只能在Linux CLI中回答这个问题,因为我对python了解不够

首先,您可以使用
blkid
获取设备的UUID:

$ blkid
/dev/sda1: UUID="4c58b621-59b6-4d05-a785-4671856520de" TYPE="ext4" PARTUUID="7763f5b3-01"
/dev/sda5: UUID="cf64e358-8be2-42f3-972d-70f36469279c" TYPE="swap" PARTUUID="7763f5b3-05"
/dev/sdb1: UUID="05a42322-cd8b-47e2-bc4c-612c7a577626" TYPE="ext3" PARTUUID="5893092a-01"
/dev/sdc1: UUID="64d7548d-689d-407a-9d23-68085476927a" TYPE="ext4" PARTUUID="000ced26-01"
/dev/sdc5: UUID="87cec41f-aa0b-4469-9e92-6ec549ea0b34" TYPE="swap" PARTUUID="000ced26-05"
确定哪个UUID是您的磁盘。一旦您拥有了该功能,您就可以使用
blkid
来确定您的磁盘在哪个
/dev/sd*
上:

$ blkid | awk -F":" '$2~"05a42322-cd8b-47e2-bc4c-612c7a577626" {print $1}'
/dev/sdb1
然后,您可以点击
/proc/mounts
,其中mount命令写入装载信息:

$ awk '$1~"/dev/sdb1" {print $2}' /proc/mounts
/media/sdb1
或者把这两者放在一起:

$ awk -v device=`blkid | awk -F":" '$2~"05a42322-cd8b-47e2-bc4c-612c7a577626" {print $1}'` '$1~device {print $2}' /proc/mounts
/media/sdb1

在对装载路径执行任何操作之前,您可以要求用户指定希望使用的设备,例如/dev/sdb1/dev/sdb2

可以使用命令的输出

df -h
df -h <path to device user wishes to use> | awk '{print $6}'
它给出以下输出

Filesystem      Size  Used Avail Use% Mounted on
/dev/sda1        19G  6.5G   12G  37% /
udev             10M     0   10M   0% /dev
tmpfs           810M  9.0M  801M   2% /run
tmpfs           2.0G   68K  2.0G   1% /dev/shm
tmpfs           5.0M  4.0K  5.0M   1% /run/lock
tmpfs           2.0G     0  2.0G   0% /sys/fs/cgroup
tmpfs           405M  4.0K  405M   1% /run/user/115
tmpfs           405M  8.0K  405M   1% /run/user/1000
运行命令

df -h
df -h <path to device user wishes to use> | awk '{print $6}'

我希望这些信息能让您更接近您的最终目标。

在对装载路径执行任何操作之前,您可以要求用户指定他们希望使用的设备,例如/dev/sdb1/dev/sdb2

可以使用命令的输出

df -h
df -h <path to device user wishes to use> | awk '{print $6}'
它给出以下输出

Filesystem      Size  Used Avail Use% Mounted on
/dev/sda1        19G  6.5G   12G  37% /
udev             10M     0   10M   0% /dev
tmpfs           810M  9.0M  801M   2% /run
tmpfs           2.0G   68K  2.0G   1% /dev/shm
tmpfs           5.0M  4.0K  5.0M   1% /run/lock
tmpfs           2.0G     0  2.0G   0% /sys/fs/cgroup
tmpfs           405M  4.0K  405M   1% /run/user/115
tmpfs           405M  8.0K  405M   1% /run/user/1000
运行命令

df -h
df -h <path to device user wishes to use> | awk '{print $6}'

我希望这些信息能让你更接近你的最终目标。

这很有见地。这让我想知道是否有可能在不必输入root/sudo密码的情况下绑定mount,或者仅仅创建一个指向程序的符号链接(在静态位置)是一个很好的解决方法(尽管我可能必须在其他地方支持符号链接)。尽管如此,这非常简单。你所需要的只是从blkid命令中解析正确的数据,你可以将更改永久地写入fstab,如果你需要这方面的支持,请让我知道,就像我以前做的那样。这很有见地。这让我想知道是否有可能在不必输入root/sudo密码的情况下绑定mount,或者仅仅创建一个指向程序的符号链接(在静态位置)是一个很好的解决方法(尽管我可能必须在其他地方支持符号链接)。尽管如此,这非常简单。您所需要的只是解析blkid命令中的正确数据,您可以将更改永久写入fstab,如果您需要这方面的支持,请告诉我,因为我以前已经这样做了。