[Python-de] os.system()

Michael Janssen Janssen at rz.uni-frankfurt.de
Mon Jan 23 18:13:13 CET 2006


On Mon, 23 Jan 2006, robaz wrote:

> ich versuche mit os.system ein tool aufzurufen + argumente übergeben, aber
> er akzeptiert nicht, dass ich das erste argument mit hochkomma umrahmen
> will.

> dies funktioniert nicht:
> text = "\"" + "\\\\path\\the_util.exe" + "\" \"" + "\\\\path\\datei 1" + "\
> \" + "\\\\path\\datei 2"" + "\""
> os.system(text)

[es wäre hier sinnvoll, die Fehlermeldung mitzuschicken ...]

bei mir funktionieren beide Versionen nicht und zwar vor allem wegen den
doppelten Quotes nach 'datei 2'. Aber auch wenn es funktionieren würde,
ist es insgesammt eh zu kompliziert. Der Spaß mit os.system geht erst los,
wenn es "funktioniert" und man dann aufpassen muss, dass wegen
Sonderzeichen nichts Unvorhergesehenes passiert. Dafür braucht man klaren
Code.

Längere Strings werden am besten zusammengebaut, indem man string
interpolation benutzt:

exe = r"\\path\the_util.exe"
path1 =  r"\\path\datei 1"
path2 = r"\\path\datei 2"
text = '"%s" "%s" "%s"' % (exe, path1, path2)
# schlägt aber spätestens dann fehl, wenn einer der strings
# Doublequotes enthält

[man beachte die raw-strings damit man Backslashes nicht doppelt schreiben
braucht]


Wenn es einen erstes-Argument-nicht-in-Doublequotes-bug gibt, dann nicht
bei mir (python2.2 auf AIX):
>>> os.system('"echo" "nix"')
nix
0


Grüße
Michael