Prob mit Argumenten

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
morytox
User
Beiträge: 25
Registriert: Dienstag 15. September 2009, 13:17

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 ?
Benutzeravatar
jbs
User
Beiträge: 953
Registriert: Mittwoch 24. Juni 2009, 13:13
Wohnort: Postdam

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.
[url=http://wiki.python-forum.de/PEP%208%20%28%C3%9Cbersetzung%29]PEP 8[/url] - Quak!
[url=http://tutorial.pocoo.org/index.html]Tutorial in Deutsch[/url]
morytox
User
Beiträge: 25
Registriert: Dienstag 15. September 2009, 13:17

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 ?
DasIch
User
Beiträge: 2718
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

Eine weitere Möglichkeit Zeichenketten zusammen zusetzen ist:

Code: Alles auswählen

"foo" "bar" "baz"
Da kann man natürlich noch Klammern drum herum machen und damit geht dass über mehrere Zeilen.
morytox
User
Beiträge: 25
Registriert: Dienstag 15. September 2009, 13:17

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 ?
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

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.
Benutzeravatar
Rebecca
User
Beiträge: 1662
Registriert: Freitag 3. Februar 2006, 12:28
Wohnort: DN, Heimat: HB
Kontaktdaten:

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.

Code: Alles auswählen

subprocess.Popen(["ls", "-l", "Meine Dokumente"])
Offizielles Python-Tutorial (Deutsche Version)

Urheberrecht, Datenschutz, Informationsfreiheit: Piratenpartei
Antworten