如何检查python中是否存在原始(Windows)驱动器?即“\\。\ PhysicalDriveN”,其中磁盘号为N
现在我可以通过打开并立即关闭它来检查原始驱动器是否存在(作为管理员)。如果存在异常,则原始设备可能不存在,否则可能存在。我知道这不是非常pythonic。还有更好的方法吗?
os.access(drive_name, os.F_OK)
始终返回False
。与os.path.exists(drive_name)
相同。我更喜欢使用python标准库。 os.stat(drive_name)
无法找到该设备。
我的工作代码示例:
drive_name = r"\\.\PhysicalDrive1"
try:
open(drive_name).close()
except FileNotFoundError:
print("The device does not exist")
else:
print("The device exists")
答案 0 :(得分:2)
在评论中指出eryksun,ctypes.windll.kernel32.QueryDosDeviceW
可用于测试设备符号链接是否存在(PhysicalDrive1
是指向实际设备位置的符号链接)。
ctypes
模块允许用户通过动态链接库访问此API函数。
QueryDosDeviceW
要求将驱动器名称作为字符串,字符数组和字符数组的长度。字符数组存储驱动器名称映射到的原始设备。该函数返回存储在字符数组中的字符数,如果驱动器不存在则为零。
import ctypes
drive_name = "PhysicalDrive1"
target = (ctypes.c_wchar * 32768)(); # Creates an instance of a character array
target_len = ctypes.windll.kernel32.QueryDosDeviceW(drive_name, target, len(target))
if not target_len:
print("The device does not exist")
else:
print("The device exists")
target
字符数组对象可能存储了值"\Device\Harddisk2\DR10"
注意强>
在python 3中,默认情况下字符串是unicode,这就是QueryDosDeviceW
(上面)工作的原因。对于Python 2,ctypes.windll.kernel32.QueryDosDeviceA
代替QueryDocDeviceW
用于字节字符串。
答案 1 :(得分:0)
不导入ctypes等。
os.path.exists("C:")
正常工作。驱动程序参数应带有尾随的“:”字符。
>>> os.path.exists("C:")
True
>>> os.path.exists("D:")
True
>>> os.path.exists("A:")
False
>>> os.path.exists("X:")
True # i have mounted a local directory here
>>> os.path.exists("C")
False # without trailing ":"