2016-02-21 7 views
2

Я пытаюсь использовать модуль Python (точнее, python-dvdvideo), чтобы клонировать образ ISO. Предоставленный класс отлично работает, если я передам ему путь к файлу ISO, который уже находится на моем компьютере, но он генерирует исключение, если я попытаюсь передать ему букву диска моего CDROM.Обращайтесь с Windows CDROM Drive как файл блока?

После быстрого осмотра кода библиотеки, я определил, что класс ожидает либо обычный файл или файл блочного устройства, как показано здесь:

def __init__(self, filename): 
    s = os.stat(filename) 
     if stat.S_ISREG(s.st_mode): 
      f = self.File(filename) 
     elif stat.S_ISBLK(s.st_mode): 
      f = DvdCssFile(filename) 
     else: 
      raise RuntimeError 

Это приводит меня к вопросу: Есть способ лечения диска CDROM Windows как любой из этих? Я смутно знаком с тем, как работает Linux в этом отношении (он рассматривает CDROM-диск в качестве файла блочного устройства в/dev/*), но не с тем, как Windows видит диски.

ответ

0

При попытке сделать что-то подобное я нашел this thread полезно. На основании информации, там (а также here) Я создал это, который показывает основы:

import os 

driveName = "D" 

# Get Window raw block device name from logical drive 
# Adapted from https://stackoverflow.com/a/6523306/1209004 
deviceName = "\\\\.\\" + driveName + ":" 

# Open as file object 
# Adapted from https://stackoverflow.com/q/7135398/1209004 
d = os.fdopen(os.open(deviceName, os.O_RDONLY|os.O_BINARY), 'rb+') 

# Read data 
data = d.read() 

# Close file object 
d.close() 

# Write data to an output file 
fOut = open('data.bin','wb') 
fOut.write(data) 
fOut.close() 

Одна вещь, которую я отметил, что по сравнению с выделенными средствами обработки изображений, таких как IsoBuster данные, считанные таким образом, может быть неполным. Кроме того, он не работает для доступа к сеансам данных на «улучшенном» аудио компакт-диске. Поэтому используйте с осторожностью.