Werte per Eingabeaufforderung ü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.
NedNederlander
User
Beiträge: 10
Registriert: Mittwoch 4. März 2009, 13:25

Mittwoch 4. März 2009, 13:33

Hallo,
ich habe ein Python-Programm geschrieben, und möchte nun sehr gerne beim Ausführen des Programmes Werte bzw. besser Wertebereiche für bestimme Parameter, die das Programm benutzt, übergeben. Bin leider nicht der erfahrenste Programmierer, und hab jetzt nach einer Weile googlen nichts passendes gefunden.

Wäre nett, wenn ihr mir ein paar Tipps in die richtige Richtung geben könntet, welche Lösungen sich für mich anbieten.


Danke!!!


PS: Ich arbeite primär mit Windows, kann zur ALLERGRÖSSTEN Not auch Ubuntu nehmen :-) aber Windows-Lösungen sind mir lieber, in Linux bin ich alles andere als fitt ;-)
DasIch
User
Beiträge: 2465
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

Mittwoch 4. März 2009, 13:35

Die Parameter die übergeben wurden sind in sys.argv zu finden.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7472
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Mittwoch 4. März 2009, 14:21

DasIch hat geschrieben:Die Parameter die übergeben wurden sind in sys.argv zu finden.
Bevor man aber da mit irgend welchen Frickellösungen anfängt:
http://docs.python.org/library/getopt.html
Benutzeravatar
Rebecca
User
Beiträge: 1662
Registriert: Freitag 3. Februar 2006, 12:28
Wohnort: DN, Heimat: HB
Kontaktdaten:

Mittwoch 4. März 2009, 14:32

Oder noch besser: [mod]optparse[/mod]
Offizielles Python-Tutorial (Deutsche Version)

Urheberrecht, Datenschutz, Informationsfreiheit: Piratenpartei
BlackJack

Mittwoch 4. März 2009, 14:36

IMHO ist `getopt` auch eine Frickellösung. ;-)
DasIch
User
Beiträge: 2465
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

Mittwoch 4. März 2009, 14:39

Hyperion hat geschrieben:Bevor man aber da mit irgend welchen Frickellösungen anfängt:http://docs.python.org/library/getopt.html
Mal abgesehen davon das getopt grausam ist lässt sich hier nicht absolut urteilen. Bei einem kleinen Skript mit einem LOC < 100 sind diese Lösungen absoluter schwachsinn.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7472
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Mittwoch 4. März 2009, 14:47

BlackJack hat geschrieben:IMHO ist `getopt` auch eine Frickellösung. ;-)
Oops ... zu schnell verlinkt! Wollte eigentlich auf optparse linken ...

@DasIch: Das kommt doch aufs Problem an! Bei einem einzelnen Parameter kann man darauf verzichten. Werden es mehr, dazu noch einige als Flags, dann würde ich das nicht mehr per Hand machen wollen!

Ich wollte dem OP ja auch nur mitteilen, dass es für komplexere Aufgaben eben fertige Module gibt!
lunar

Mittwoch 4. März 2009, 17:20

Bei einem kleinen Skript mit einem LOC < 100 sind diese Lösungen absoluter schwachsinn.
Und was hat man davon, wenn man darauf verzichtet? Freude daran, seine Kommandozeilenoptionen selbst zu parsen?
BlackJack

Mittwoch 4. März 2009, 18:38

@lunar: Kommt drauf an, was da unter "parsen" fällt. Solange es sich zum Beispiel auf so Sachen wie ``verbose = '-v' in sys.argv`` beschränkt, ist `optparse` aufwändiger zu benutzen.
DasIch
User
Beiträge: 2465
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

Mittwoch 4. März 2009, 19:41

lunar hat geschrieben:Und was hat man davon, wenn man darauf verzichtet? Freude daran, seine Kommandozeilenoptionen selbst zu parsen?
Sollte man unerwarteterweise doch zig Optionen haben kann es sinn machen aber die meisten dieser kleinen Skripte haben dass nicht. Da hat man i.d.R. eine handvoll Parameter die man in 2 Zeilen "geparst" hat.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7472
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Mittwoch 4. März 2009, 20:11

DasIch hat geschrieben: Sollte man unerwarteterweise doch zig Optionen haben kann es sinn machen aber die meisten dieser kleinen Skripte haben dass nicht. Da hat man i.d.R. eine handvoll Parameter die man in 2 Zeilen "geparst" hat.
Hm ... da würde mich mal ein Bsp. interessieren mit 3 Parametern, bei dem Du eine Typüberprüfung hast und dazu noch einen Hilfetext! Ich denke bereits da hat optparse Vorteile ...
NedNederlander
User
Beiträge: 10
Registriert: Mittwoch 4. März 2009, 13:25

Freitag 6. März 2009, 13:40

gibts es auch eine möglichkeit - nehmen wir mal an ich benutze die sys.argv-methode - für eine variable, die vom programm genutzt wird, gleich merhere werte zu übergeben, z.B. einen ganzen bereich?
EyDu
User
Beiträge: 4871
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Freitag 6. März 2009, 13:46

Klar. Da sys.argv eine Liste ist, kannst du per Slicing einen Bereich auswählen und einer Variable zuweisen.
Das Leben ist wie ein Tennisball.
NedNederlander
User
Beiträge: 10
Registriert: Mittwoch 4. März 2009, 13:25

Freitag 6. März 2009, 13:55

EyDu hat geschrieben:Klar. Da sys.argv eine Liste ist, kannst du per Slicing einen Bereich auswählen und einer Variable zuweisen.

was bedeutet slicing?

ich meine nicht mehrere unterschiedliche variablen übergeben, sondern für eine variable mehrere unterschiedliche werte in einem einzigen durchlauf übergeben.
derdon
User
Beiträge: 1316
Registriert: Freitag 24. Oktober 2008, 14:32

Freitag 6. März 2009, 14:08

Code: Alles auswählen

import sys
names = sys.argv[1].split(',')
print '\n'.join(names)
Das dann z.B. so aufrufen:

Code: Alles auswählen

python print_names.py peter,bob,robert
Edit: hier noch ein Beispiel mit optparse:

Code: Alles auswählen

from optparse import OptionParser
parser = OptionParser()
parser.add_option('-n', '--names', help='a comma-seperated list of names', dest='names')
options, args = parser.parse_args()
print '\n'.join(options.names.split(','))
Dieses Skript wird dann z.B. wie folgt aufgerufen:

Code: Alles auswählen

python print_names2.py --names peter,bob,robert
Zuletzt geändert von derdon am Freitag 6. März 2009, 14:54, insgesamt 2-mal geändert.
Antworten