Seite 1 von 1
Prob mit Argumenten
Verfasst: Dienstag 15. September 2009, 13:23
von morytox
Hallo, ich bin noch nen Frischling bei Python und hab mich ma am Scripten versucht. Nun bin ich auf ein Problem gestoßen welches mir etwas kopfzerbrechen bereitet.
Ich schreibe ein script was diverse befehle in der Shell von Linux ausführt.
dazu verwende ich
os.system()
Darin habe ich dann den Befehl. Nun habe ich die befehle zerlegt und teilweise versucht pfade durch variablen zu ersetzten so ist dann folgendes konstrukt entstanden:
os.system("string", variable, "string") was leider nicht geht da os.system nur ein argument nimmt. Jedoch wenn ich alles vorher auf eine variable lege bsp:
systemvariable="string", variable, "string"
os.system(systemvariable)
bekomm ich die meldung dass os.system() nur Strings und keine tuple nimmt. Gibt es eine möglichkeit variablen in strings einzubetten ?
Verfasst: Dienstag 15. September 2009, 13:29
von jbs
Code: Alles auswählen
s1 = 'Hallo '
s2 = 'Welt'
s3 = '!'
print s1, s2, s3
print s1+s2+s3
print ''.join((s1,s2, s3))
Zeichenketten kann man mit ``+`` zusammenfügen (besser mit ''.join) und nicht mit ``,``.
Statt os.system solltest du dir lieber subprocess angucken.
Verfasst: Dienstag 15. September 2009, 13:35
von morytox
subprocess habe ich mir schon einmal angeschaut, aber ehrlich gesagt habe ich da garnicht durchgesehen. Ich habe es verwendet um mir eine Ausgabe aus der shell zunutze zu machen aber im allgemeinen wirkt os.system für mich einfacher oder gibt es da starke vorteile ?
Verfasst: Dienstag 15. September 2009, 14:29
von DasIch
Eine weitere Möglichkeit Zeichenketten zusammen zusetzen ist:
Da kann man natürlich noch Klammern drum herum machen und damit geht dass über mehrere Zeilen.
Verfasst: Mittwoch 16. September 2009, 07:33
von morytox
kansnt du mir ein beispiel geben wie man das anwendet ? kann mir das in der praxis grad nicht wirklich vorstellen.
und zum thema subprocess: liege ich falsch mit der erkenntnis dass wenn ich den befehl subprocess benutze in den klammen jeden Befehel so oft mit "" teilen muss wie lehrzeichen sind oder hat die folge der argumente ne bestimmte bedeutung bsp:
subprocess.Popen([r"tar", "-xf", "xyz.tgz", "/pfadx"])
müsste man das dann immer so schreiben oder wie funzt die argumentenfolge genau ?
Verfasst: Mittwoch 16. September 2009, 08:30
von cofi
morytox hat geschrieben:kansnt du mir ein beispiel geben wie man das anwendet ? kann mir das in der praxis grad nicht wirklich vorstellen.
In [47]: "Dann " "probiers " "aus"
Out[47]: 'Dann probiers aus'
morytox hat geschrieben:und zum thema subprocess: liege ich falsch mit der erkenntnis dass wenn ich den befehl subprocess benutze in den klammen jeden Befehel so oft mit "" teilen muss wie lehrzeichen sind oder hat die folge der argumente ne bestimmte bedeutung bsp:
Nein, mit leeren Strings trennt man ueberhaupt nichts. Aber alles, das mit Leerzeichen getrennt werden soll ist ein Listenelement (Liste = []).
Die Reihenfolge ist genau die, die du auch sonst eingeben wuerdest.
Verfasst: Mittwoch 16. September 2009, 10:15
von Rebecca
Ich denke mal, das mit den Leerzeichen war darauf bezogen, dass man normalerweise in der Shell die Parameter mit Leerzeichen trennt, von daher war die Aussage schon richtig. Und da man in der Shell dann ein wenig Aufwand betreiben muss, wenn man mal Parameter hat, die ein Leerzeichen enthalten sollen, loest man das mit subprocess halt viel angenehmer mit einer Liste.