我正在使用 tkinter 和 python 创建一个 GUI 应用程序。该应用程序要求用户插入包含视频文件的 USB 闪存驱动器。我正在使用 openbox 启动该应用程序。 USB 似乎没有自动安装,或者位于与使用 LXDE 启动应用程序时不同的位置 ( /media/pi
)。 USB 设备安装在哪里(路径),或者如果不是,如何配置 pi 以在使用 openbox 时自动安装它?
这是我现在用来访问 USB 的代码,假设它已经安装了。
for root, dirs, self.files in os.walk('/media/pi'):
答案1
在 Linux 上自动挂载存储设备的方法有很多种。甚至安装位置也有很大差异。此外,并非所有系统都设置为自动挂载设备,某些桌面环境会在您访问它们时自动挂载,而另一些桌面环境则在您插入它们时自动挂载。
基本上,为了使其可移植,您不能依赖某个位置的安装点来查找设备。
相反,您应该找到设备,过滤您感兴趣的可移动设备,然后将它们映射到它们安装的位置(如果安装的话)。使用 python,您可以获取可移动设备的列表pyudev
,然后使用以下命令将它们映射到安装点psutil
:
#!/usr/bin/env python
import pyudev
import psutil
context = pyudev.Context()
removable = [device for device in context.list_devices(subsystem='block', DEVTYPE='disk') if device.attributes.asstring('removable') == "1"]
for device in removable:
partitions = [device.device_node for device in context.list_devices(subsystem='block', DEVTYPE='partition', parent=device)]
print("All removable partitions: {}".format(", ".join(partitions)))
print("Mounted removable partitions:")
for p in psutil.disk_partitions():
if p.device in partitions:
print(" {}: {}".format(p.device, p.mountpoint))
这将产生:
% python2 partitions.py
All removable partitions: /dev/sdb1, /dev/sdb2
Mounted removable partitions:
/dev/sdb2: /run/media/mdaffin/ARCHISO_EFI
udisks
如果需要,您可以通过自动安装未安装的分区来实现这一未来。
答案2
if device.attributes.asstring('removable') == "1" 导致错误。导致“bool”对象没有属性错误。我还有其他方法可以写这个吗?