liste mit sys.argv[] übergeben

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.
smolle
User
Beiträge: 3
Registriert: Montag 26. Mai 2008, 12:49

liste mit sys.argv[] übergeben

Beitragvon smolle » Freitag 27. Juni 2008, 20:05

Hallo,
könnt ihr mir bitte helfen.
Ich möchte eine Liste in folgender Form in der Kommandozeile übergeben:
....test.py ((para1,para2,para3),(para4,para5,para6))

Quellcode von test.py:
Parameter = list(sys.argv[1])

Die Typ Umwandlung wird gemacht aber die Liste sieht dann so aus:
["(", "(", "p", "a", "r", "a", "1", ","................)"] und so weiter.

Gibts da vieleicht ne Möglichkeit. Ich weiß nicht mehr weiter.
Vielen Dank für eure Hilfe
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

Beitragvon numerix » Freitag 27. Juni 2008, 20:15

Hallo smolle,

du übergibst quasi nur einen Parameter an dein Programm, weil du keine trennen Leerzeichen verwendest.

Danach nimmst du diesen einen Parameter, der als Zeichenkette ankommt, und machst eine Liste daraus - das hat zur Folge, dass die Zeichenkette in Zeichen zerlegt wird, die als Elemente deiner Liste auftauchen.

Die einfachste Möglichkeit wäre, die Parameter in der Form

Code: Alles auswählen

test.py para1 para2 para3 etc.


zu übergeben.

Wenn du das nicht willst, dann musst du den einen übergebenen Parameter (als Zeichenkette) so bearbeiten, dass du die gewünschten Parameter extrahierst.

Edit:
Also wenn du wirklich die Parameter nur hinter einander in einer Liste haben willst (keine Tupel - das suggeriert nämlich die Notation deiner Parameter), dann z.B. so:

Code: Alles auswählen

arglist = sys.argv[1].replace('(','').replace(')','').split(',')
smolle
User
Beiträge: 3
Registriert: Montag 26. Mai 2008, 12:49

Beitragvon smolle » Samstag 28. Juni 2008, 14:43

Vielen Dank hat mir weiter geholfen.
Der Programmcode sieht nun so aus:

zu übergebener string: (("a1","a2","a3","a4"),("b1","b2","b3","b4")("c1","c2","c3","c4"))

list =(sys.argv[2]).replace('((','').replace('))','').split('),(')

list2=[]
for z in list:
list1 = z.split(',')
list2.append(list1)


for res in list2:
Parameter1 =res[0]
Parameter2 =res[1]
Parameter3=res[2]
Parameter4 =res[3]

Ausgabe:

Parameter1 = a1
Parameter2 = a2
Parameter3 = a3
Parameter4 = a4

Parameter1 = b1
Parameter2 = b2
Parameter3 = b3
Parameter4 = b4

Parameter1 = c1
Parameter2 = c2
Parameter3 = c3
Parameter4 = c4

Was meint ihr geht das so in Ordnung oder zu umständlich
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

Beitragvon numerix » Samstag 28. Juni 2008, 15:44

smolle hat geschrieben:Was meint ihr geht das so in Ordnung oder zu umständlich


"Umständlich" ist irgendwie nicht das richtige Wort. Es ist total verquer.

Ich glaube, der momentan beste Ansatz wäre, das Tutorial von der ersten Seite an zu lesen soweit bist du an die Stellen kommst, wo das behandelt wird, was du brauchst. Dann kriegst du es alleine anständig hin.

Wer ist online?

Mitglieder in diesem Forum: Baidu [Spider]