@BlackJack: zunächst einmal vielen Dank für die schnelle Hilfe.
Ich habe mich zuvor ein wenig mit AutoScript befasst, in Python bin ich allerdings kompletter Neuling.
Ich habe leider immer noch das Problem mit der Übergabe der Variable.
Als Hintergrund-Info: ich bastel an einer Möglichkeit, wie ich diverse Treiber oder Software-Produkte bis in die letzte Datei entpacken kann, um anschließend von den so erzeugten Dateien Hashwerte zu erzeugen (MD5, SHA1, SHA256).
Also... per "DOS"-BATCH-Datei sieht der Befehl so aus:
Code: Alles auswählen
msiexec /a "C:\HydraVision Package v13.4\13-4_vista_win7_win8_32-64_hydravision\$_OUTDIR\Packages\Apps\HydraVision\HydraVision.msi" /qb TARGETDIR="C:\HydraVision Package v13.4\13-4_vista_win7_win8_32-64_hydravision\$_OUTDIR\Packages\Apps\HydraVision\HydraVision"
Dieser Befehl funktioniert auch (trotz Leer- und Sonderzeichen).
Wenn ich unter Python 3.3 folgenden Befehl ausführe,
Code: Alles auswählen
subprocess.check_call(['msiexec.exe', '/a', datei, '/qb', 'TARGETDIR="{0}"'.format((filesplit(datei))[3])], stderr=subprocess.STDOUT)
bekomme ich diese Fehlermeldung:
Code: Alles auswählen
subprocess.CalledProcessError: Command '['msiexec.exe', '/a', 'C:\\HydraVision Package v13.4\\13-4_vista_win7_win8_32-64_hydravision\\$_OUTDIR\\Packages\\Apps\\HydraVision\\HydraVision.msi', '/qb', 'TARGETDIR="C:\\HydraVision Package v13.4\\13-4_vista_win7_win8_32-64_hydravision\\$_OUTDIR\\Packages\\Apps\\HydraVision\\HydraVision"']' returned non-zero exit status 1639
Die Übergabe der Leerzeichen scheint ja zu stimmen.
Führe ich folgenden Befehl aus,
Code: Alles auswählen
subprocess.check_call(['msiexec.exe', '/a', datei, '/qb', 'TARGETDIR=' + "D:\TEMP"], stderr=subprocess.STDOUT)
wird dieser sauber ausgeführt.
Füge ich jedoch ein Lehrzeichen hinzu ("D:\TEMP 2"), funktioniert der Befehl schon nicht mehr. Ich erhalte die gleiche Fehlermeldung wie oben...
Notfalls kann ich mir auch eine Batch-Datei erzeugen lassen, diese ausführen und anschließend wieder löschen... Aber das ist ja nicht gerade der "coolste" Weg...
Eines vielleicht noch abschließend...
Code: Alles auswählen
subprocess.check_call(["\\Tools\\7z.exe", "x", datei, "-o" + (filesplit(datei))[3]], stderr=subprocess.STDOUT)
funktioniert auch ohne Anführungszeichen (auch wenn Leerzeichen oder ähnliches enthalten sind).