в Python, как отделить локальные жесткие диски от сети и дискеты в Windows?
Я искал эту информацию некоторое время, и у меня есть несколько способов получить список локальных дисков под Windows. Вот два примера:--3-->
print win32api.GetLogicalDriveStrings().split("x00")
и
def getDriveLetters(self):
self.drvs = []
n_drives = win32api.GetLogicalDrives()
for i in range(0,25): #check all drive letters
j = 2**i # bitmask for each letter
if n_drives & j > 0:
self.drvs.append(chr(65+i)+":/")
print self.drvs
то, что я не могу найти, - это способ отделить дискеты (A:), usb-накопители (G:), CD-диски (E:) и сетевые диски (P:) от локальных жестких дисков (C:, D:)
Если бы все они были назначены одинаковыми буквами, это было бы легко, но я пишу этот скрипт для мониторинга локальных пространство на жестком диске в сети компьютеров с различными конфигурациями.
любая помощь будет оценили! Спасибо.
2 ответов
вы можете попробовать win32 GetDriveType.
import win32file
>>> win32file.GetDriveType("C:/") == win32file.DRIVE_FIXED ##hardrive
True
>>> win32file.GetDriveType("Z:/") == win32file.DRIVE_FIXED ##network
False
>>> win32file.GetDriveType("D:/") == win32file.DRIVE_FIXED ##cd-rom
False
Спасибо за ваш пост-помог мне с портом ruby. Метод getDriveLetters возвращает хэш (dict): строка буквы диска, строка типа диска.
require 'Win32API'
GetLogicalDrives = Win32API.new('kernel32', 'GetLogicalDrives', 'V', 'L')
GetDriveType = Win32API.new('kernel32', 'GetDriveType', 'P', 'I')
def GetDriveType(path)
GetDriveType.call(path)
end
def GetLogicalDrives()
GetLogicalDrives.call()
end
def getDriveLetters
drivetype = {
0 => 'DRIVE_UNKNOWN',
1 => 'DRIVE_NO_ROOT_DIR',
2 => 'DRIVE_REMOVABLE',
3 => 'DRIVE_FIXED',
4 => 'DRIVE_REMOTE',
5 => 'DRIVE_CDROM',
6 => 'DRIVE_RAMDISK'
}
drvs = []
n_drives = GetLogicalDrives()
for i in 0..25 do #check all drive letters
j = 2**i # bitmask for each letter
if n_drives & j > 0 then
drive = (65+i).chr + ":/"
drvs += [drive => drivetype[GetDriveType(drive)]]
end
end
return drvs
end
puts getDriveLetters