我希望能够获取设备名称(例如:/dev/disk2
)并确定它在Python中的安装位置(例如:/mnt/cdrom
或/Volumes/RANDLABEL
)。 / p>
我可以这样做的一种方法是运行df
或mount
,然后解析输出,但这看起来非常俗气且不可靠。例如,mount
使用" on "
作为设备和挂载点之间的分隔符。虽然非常不可能,但这些中的任何一个都可能包含该字符串,使得输出不明确。
在Linux上,我可以阅读/proc/mounts
,但这不适用于Mac OS X.
所以我正在寻找一种方法,以可靠的方式找到设备的挂载点(即:可以处理任意(合法)设备/挂载点名称)并且“尽可能便携”。 (我猜测可能无法实现对Windows的可移植性 - 我不确定它是否有类似的设备挂载点概念。)我特别想要一些适用于Linux和OS X的东西。
答案 0 :(得分:3)
实际上没有可移植的方法,所以你需要处理特定于平台的代码。
在OS X上,在命令级别获取磁盘卷信息的最简单且最可靠的方法是使用-plist
的{{1}}选项。然后可以使用diskutil list
模块直接在Python中处理输出。例如:
plistlib
答案 1 :(得分:3)
我不认为这在OS X中有效,但在Linux中以编程方式获取设备是否已安装以及通过dbus org.freedesktop.UDisks.Device
接口的路径的一种方式:
import sys, dbus
device_name = sys.argv[1]
bus = dbus.SystemBus()
ud_manager_obj = bus.get_object("org.freedesktop.UDisks", "/org/freedesktop/UDisks")
ud_manager = dbus.Interface(ud_manager_obj, 'org.freedesktop.UDisks')
device = bus.get_object('org.freedesktop.UDisks',
'/org/freedesktop/UDisks/devices/{0}'.format(device_name))
device_properties = dbus.Interface(device, dbus.PROPERTIES_IFACE)
if device_properties.Get('org.freedesktop.UDisks.Device', 'DeviceIsMounted'):
for mount_path in device_properties.Get('org.freedesktop.UDisks.Device', 'DeviceMountPaths'):
print mount_path
答案 2 :(得分:2)
(从我上面的评论:mtab
是标准的Linux方式。它在FreeBSD,Mac OS X或Solaris上不存在。前两个有getfsstat(2)
和getmntinfo(2)
系统调用;在Solaris上你可以使用getmntent(3C)
。不幸的是,POSIX AFAIK没有定义当前安装的文件系统列表,因此它在不同的平台上有很大的不同。)
来自PyPI的PSI package中有实验mount
模块,它似乎试图将所有特定于平台的方法捆绑成一个简单的抽象,并且宣传为在Mac OS X上工作(达尔文),AIX,Linux和Solaris。 Darwin模块可能适用于* BSD。
答案 3 :(得分:1)
阅读/etc/mtab
和/etc/fstab
怎么样?
我不知道OSX,但这是知道安装在哪里的标准Unix方式。 mtab
应列出所有已挂载的文件系统,fstab
应列出所有预定义的挂载点(可能实际安装或未安装)。