hier ein kleines RAW Imaging Beispiel ... kann man z.b. ISO's von CDs erstellen. Zeigt u.a. das öffnen von RAW devices unter windows.
Code ist absichtlich möglichst ausführlich gehalten.
IOErrors werden auch nicht behandelt, da es mir darum ging, zu zeigen wie es im prinzip funktioniert.
Code: Alles auswählen
E:\sw>makeiso.py
Which drive to create iso from? e.g. D: - (Blank to exit) : f:
enter destination file (Blank to exit) : e:\test.iso
Creating image e:\test.iso . . . . . . . . . . . . . . . . . . . . . Done
Created Image with 662231040 bytes successfully!
Und hier der source:
Code: Alles auswählen
import sys
BLOCK_SIZE = 32 * 1024 * 1024
def get_drive():
"""
Ask for the drive letter
"""
drive_letter = None
while not drive_letter:
drive_letter = raw_input("Which drive to create iso from? e.g. D: - (Blank to exit) : ")
if len(drive_letter) == 2 and drive_letter[1] == ":" and drive_letter[0].isalpha():
return drive_letter
elif drive_letter == "":
sys.exit(2)
else:
drive_letter = None
def get_dest():
"""
Ask for the destination .iso file
"""
dest = None
while not dest:
dest = raw_input("enter destination file (Blank to exit) : ")
if dest == "":
sys.exit(2)
try:
f = file(dest, 'wb')
f.close()
return dest
except Exception, e:
print "unable to open destination - reason: %s" %e
dest = None
def copy_data(drive, dest):
"""
Copy raw data over to dest file
"""
fi = file(r'\\.\%s' %drive, 'rb', BLOCK_SIZE)
fo = file(dest, 'wb', BLOCK_SIZE)
print "Creating image %s " %dest ,
while True:
buff = fi.read(BLOCK_SIZE)
fo.write(buff)
print ".",
if len(buff) == 0:
fo.flush()
print "Done"
break
print "Created Image with %d bytes successfully!" %fo.tell()
fi.close()
fo.close()
if __name__ == '__main__':
copy_data(get_drive(), get_dest())