Seite 1 von 1

Fehler in Skript - Anfänger

Verfasst: Montag 5. November 2007, 17:02
von mro
Hallo, da ich mich vorher NIE mit der Python Programmierung auseinandergesetzt habe sondern nur c++ und vb, komme ich hier nicht mehr alleine weiter.

Ich habe ein Skript, welches für eine automatische betriebssysteminstallation dienen sol, bzw die Partitionen festlegen soll.

Bei bleibt es in Zeile 54 stehen, bei dem else, ich weiß nicht was der Fehler ist. Vielleicht könnt Ihr das skript mal auf fehler Prüfen, das wäre supper...

DANKE schonmal

Code: Alles auswählen

target = '/mnt/hd' 
source = DEPOT_MOUNT + '/install/winxppro' 
hwFilename = DEPOT_MOUNT + "/pcpatch/pclog/" + hostname + ".hw" 
srcDriversDir = DEPOT_MOUNT + '/install/winxppro/drivers' 
 
# Do hardware inventory 
hardware = hardwareInventory(filename = hwFilename) 
 
################################################################################### 
### Modifikation 
################################################################################### 
 
# Get first harddisk 
KB=1000 
MB=1000*1000 
GB=1000*1000*1000 
 
disks = getHarddisks() 
disk = disks[0] 
disksize = disk.size - KB 
partitions = disk.getPartitions() 
 
# Disksize <= 2GB 
# => Platte zu klein => exit 
if (disksize <= 2*GB): 
    raise Exception("Die Festplatte ist kleiner als 2GB!\n") 
 
# 2GB < Disksize <= 6GB 
# => erstelle 1 Partition über die gesamte Platte 
elif (2*GB < disksize) and (disksize <= 6*GB): 
    if not partitions: 4
ui.getMessageBox().addText("Es wird eine Partition über die gesamte Platte erstellt!\n") 
disk.deletePartitionTable() 
disk.createPartition(start="0%", end="100%", fs="fat32", boot=True) 
disk.createFilesystem(partition=1, fs="fat32")  
        #else:
        partition = partitions[0] 
partend = str(int((partition['end'] / (1024*1024)) - 1)) + "M" 
ui.getMessageBox().addText('Ende Partition 1: %s\n' % (partend)) 
ui.getMessageBox().addText("Partition 1 wird neu erstellt\n")  
disk.deletePartition(partition=1) 
disk.createPartition(start="0%", end=partend, fs="fat32", boot=True) 
disk.createFilesystem(partition=1, fs="fat32") 
 
# 6GB < Disksize <= 15GB 
# => 2 Partitionen: 1. 6GB, 2. Rest 
elif (6*GB < disksize) and (disksize <= 15*GB): 
if not partitions: 
ui.getMessageBox().addText("Es werden zwei Partition erstellt!\n1. Partition: 6GB, 2. Partition: Rest\n")  
disk.deletePartitionTable() 
disk.createPartition(start="0M", end="6000M", fs="fat32", boot=True) 
disk.createFilesystem(partition=1, fs="fat32")  
disk.createPartition(start="6001M", end="100%", fs="ntfs", boot=False) 
else: 
partition = partitions[0] 
partend = str(int((partition['end'] / (1024*1024)) - 1)) + "M" 
ui.getMessageBox().addText('Ende Partition 1: %s\n' % (partend)) 
ui.getMessageBox().addText("Partition 1 wird neu erstellt\n")  
disk.deletePartition(partition=1) 
disk.createPartition(start="0%", end=partend, fs="fat32", boot=True) 
disk.createFilesystem(partition=1, fs="fat32") 
 
# Disksize > 15GB 
# 2 Partitionen: 1. 40%, 2. 60% 
else: 
if not partitions: 
ui.getMessageBox().addText("Es werden zwei Partition erstellt!\n1. Partition: 40%, 2. Partition: 60%\n")  
disk.deletePartitionTable() 
disk.createPartition(start="0%", end="40%", fs="fat32", boot=True) 
disk.createFilesystem(partition=1, fs="fat32")  
disk.createPartition(start="41%", end="100%", fs="ntfs", boot=False) 
else: 
partition = partitions[0] 
partend = str(int((partition['end'] / (1024*1024)) - 1)) + "M" 
ui.getMessageBox().addText('Ende Partition 1: %s\n' % (partend)) 
ui.getMessageBox().addText("Partition 1 wird neu erstellt\n") 
ui.getMessageBox().addText("\nSchritt 1: Loesche alte Partition\n")  
disk.deletePartition(partition=1) 
ui.getMessageBox().addText("\nSchritt 2: Erstelle neue Partition\n")  
disk.createPartition(start="0%", end=partend, fs="fat32", boot=True) 
ui.getMessageBox().addText("\nSchritt 3: Formatiere Partition\n")  
disk.createFilesystem(partition=1, fs="fat32") 
 
 
 
 
################################################################################### 
### Modifikation ende 
################################################################################### 
 
# Write Master Boot Record 
disk.writeMasterBootRecord(system='auto') 
 
# Write Partition Boot Record 
disk.writePartitionBootRecord(partition=1, fsType='fat32') 
 
# Mount partition 1 
disk.mountPartition(partition=1, mountpoint=target) 
 
# Copy DOS files 
copy('/dos/*', target) 
 
# Copy Windows installation files 
copy(source + '/i386', target) 
 
# Copy OEM files 
copy(source + '/opsi/$oem$', target + '/i386') 
 
# Copy opsi-preloginloader 
copy(DEPOT_MOUNT + '/install/preloginloader/files/*', target) 
 
# Integrate drivers 
if os.path.exists(srcDriversDir): 
ui.getMessageBox().addText("Treiber-Verzeichnis gefunden, versuche Treiber einbzubinden.\n") 
oemPnpDriversPath = '' 
driverNumber = 0 
for (key, info) in hardware.items(): 
name = info.get('name', '???') 
name = name.replace('/', '_') 
vendorId = info.get('vendorId', '').upper() 
deviceId = info.get('deviceId', '').upper() 
if not vendorId or not deviceId: 
continue 
logger.info("Searching driver for device '%s', id '%s:%s'" % (name, vendorId, deviceId)) 
ui.getMessageBox().addText(" * Suche Treiber fuer '%s'.\n" % name) 
srcDriverPath = os.path.join(srcDriversDir, 'pciids', vendorId) 
if not os.path.exists(srcDriverPath): 
logger.error("Vendor directory '%s' not found" % srcDriverPath) 
ui.getMessageBox().addText(" [Fehler] Hersteller-Verzeichnis '%s' nicht gefunden.\n" % vendorId) 
continue 
srcDriverPath = os.path.join(srcDriverPath, deviceId) 
if not os.path.exists(srcDriverPath): 
logger.error("Device directory '%s' not found" % srcDriverPath) 
ui.getMessageBox().addText(" [Fehler] Geraete-Verzeichnis '%s' nicht gefunden.\n" % deviceId) 
continue 
logger.notice("Found driver for device '%s', in dir '%s'" % (name, srcDriverPath)) 
ui.getMessageBox().addText(" [OK] Treiber gefunden, wird eingebunden.\n") 
driverNumber += 1 
if not os.path.exists( os.path.join(target, 'drv') ): 
os.mkdir( os.path.join(target, 'drv') ) 
if not os.path.exists( os.path.join(target, 'drv', str(driverNumber)) ): 
os.mkdir( os.path.join(target, 'drv', str(driverNumber)) ) 
copy( srcDriverPath + '/*', os.path.join(target, 'drv', str(driverNumber)) ) 
if oemPnpDriversPath: 
oemPnpDriversPath += ';' 
oemPnpDriversPath += '\\'.join(['drv', str(driverNumber)]) 
 
pi = open(PATCHA_IN, 'a') 
print >> pi, "oempnpdriverspath=%s" % oemPnpDriversPath 
pi.close() 
 
# Create autoexec.bat 
f = open(target + '/autoexec.bat', 'w') 
print >> f, "smartdrv.exe\r" 
print >> f, "call deldos.bat\r" 
print >> f, "rm deldos.bat\r" 
print >> f, "c:\i386\winnt /s:C:\i386 /u:C:\i386\$oem$\unattend\unattend.txt\r" 
f.close() 
 
# Patch files 
for i in ( target + '/i386/\$oem\$/unattend/unattend.txt', target + '/opsi/cfg/pxecfg.ini' ): 
execute('/usr/local/bin/patcha %s' % i) 
execute('/usr/local/bin/patcha -f %s %s' % (PATCHA_IN, i)) 
 
# copy sysconf.ini to C:\opsi\cfg 
copy (SYSCONF_INI , target + '/opsi/cfg') 
 
# Umount partition 
disk.umountPartition(partition=1) 
 
# Reboot 
reboot() 

Verfasst: Montag 5. November 2007, 17:10
von Zap
Pythoncode funktiert nur mit richtiger Einrückung.

Code: Alles auswählen

if True:
    print "Hallo"
Dein Code hat an einigen Stellen keine. Wenn das bei deinem Original auch der Fall ist ist das der Grund.

Verfasst: Montag 5. November 2007, 17:16
von mro
Hallo Zap, danke für deine zügige Antwort,

ja das habe ich schon mitbekommen mit der einrückung, mitlerweile habe ich eine leerzeile for das else in zeile 54 gesetzt und nun bekomme ich die Meldung, "invalid syntax"

komme da leider nicht so weiter!

Verfasst: Montag 5. November 2007, 17:40
von BlackJack
Eine Leerzeile nützt da nichts; Du musst korrekt einrücken. Was/Wieviel korrekt ist, kann man so generell nicht sagen, das ergibt sich aus der Bedeutung die das Ganze haben soll.