also ich hab schon bissl gesucht aber noch nichts gefunden, wie mache ich das dass ich Argumente bei Skript start übergebe?
Also ich rufe das Skript mit ./skript.py arg1 arg2 auf und die werden dann im Prog weiterbenutzt
Argumente einlesen beim Skriptstart
- birkenfeld
- Python-Forum Veteran
- Beiträge: 1603
- Registriert: Montag 20. März 2006, 15:29
- Wohnort: Die aufstrebende Universitätsstadt bei München
Die Argumente sind in `sys.argv` zu finden.
Zu beachten ist dabei, dass `sys.argv[0]` der Skriptname, in deinem Fall also "./skript.py" ist.
Zu beachten ist dabei, dass `sys.argv[0]` der Skriptname, in deinem Fall also "./skript.py" ist.
okay danke
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Und wenn du dazu einen richtigen Parser suchst - search no more! Die Stdlib bietet mit optparse schon einen, der ziemlich viel kann und recht häufig benutzt wird. Daraus folgt auch, dass man viele Beispiele findet, wie man den eigentlich nutzt.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
kann ich in optparse auch irgendwie sagen dass das letzte Argument ein Dateiname ist?
Also dass ich entweder
skriptname [optionen] dateiname
oder
skriptname dateiname
Also dass ich entweder
skriptname [optionen] dateiname
oder
skriptname dateiname
Deine Argumente sind - sofern Du sys.argv oder optparse verwendest - Strings. Egal ob einfaches Argument oder ein Optionswert.
D.h. eine Prüfung ob es sich bei dem Wert tatsächlich zu dem Pfad zu einer Datei handelt ... das musst Du dennoch in Deiner internen Plausibilitätslogik abprüfen und entsprechend reagieren.
So richtig auf "das letzte" Argument, würde ich mich auch nicht verlassen. Es bietet sich wohl eher dann, wie Du ja auch schon vermutet hast, eine Option an.
Z.B. "test.py --file=c:\test.cfg"
So etwas lässt sich relativ gut mit optparse lösen.
D.h. eine Prüfung ob es sich bei dem Wert tatsächlich zu dem Pfad zu einer Datei handelt ... das musst Du dennoch in Deiner internen Plausibilitätslogik abprüfen und entsprechend reagieren.
So richtig auf "das letzte" Argument, würde ich mich auch nicht verlassen. Es bietet sich wohl eher dann, wie Du ja auch schon vermutet hast, eine Option an.
Z.B. "test.py --file=c:\test.cfg"
So etwas lässt sich relativ gut mit optparse lösen.
- gerold
- Python-Forum Veteran
- Beiträge: 5555
- Registriert: Samstag 28. Februar 2004, 22:04
- Wohnort: Oberhofen im Inntal (Tirol)
- Kontaktdaten:
Hi DaSch!DaSch hat geschrieben:kann ich in optparse auch irgendwie sagen dass das letzte Argument ein Dateiname ist?
Also dass ich entweder
skriptname [optionen] dateiname
oder
skriptname dateiname
Optparse unterscheidet zwischen "Optionen" und "Argumenten".
Das sind Optionen:
--help --file="hallo.txt" -f "hallo.txt" -d -h
Das sind Argumente:
hallo.txt servus.txt
Alles, was an das Programm übergeben und nicht als Option gekennzeichtet wurde, wird als Argument erkannt.
So ist z.B. das hier möglich:
python hallo.py --out=output.txt input1.txt --debug input2.txt input3.txt --fast
"--out=output.txt", "--debug" und "--fast" werden als Optionen erkannt.
"input1.txt", "input2.txt" und "input3.txt" werden als Argumente erkannt.
mfg
Gerold
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Was sehr genial ist, wie ich findeAlles, was an das Programm übergeben und nicht als Option gekennzeichtet wurde, wird als Argument erkannt.
Optparse kann ich ebenfalls nur empfehlen. Sehr Featurereich (eigentlich für jeden was dabei), lässt sich leicht modifizieren (ja, ich musste für daucms damals das Hilfesystem umschreiben... das ging in ca. 30 Zeilen Code. Einfach Einfach ist Einfach Besser).
MfG EnTeQuAk
also die Datein mit --file anzugeben ist keine Lösung das ist für einen User unbefriedigent besonders wenn man die Datei so oder so angeben muss, da die das mit den Argumenten schon besser, da muss ich mir nur noch anschauen wie das Konkret funktioniert. Schlussendlich kann man wie ich hoffe auch optparse mit sys.argv kombinieren
Kann man Nur, was es dir bringt, müsste man abwegen. Ich meine... klar solch Sachen (wie bei daucms) mit einem `Debug`-Mode, die voeher noch Benchmarks aktivieren müssen, die könnten vorher schon rausgefiltert werden.Schlussendlich kann man wie ich hoffe auch optparse mit sys.argv kombinieren
Ansonsten wüsste ich nicht, was an
`` --file=datei.txt ``
unbefriedigend sein soll. Es ist jedenfalls sprechend und daher eigentlich einfach.
MfG EnTeQuAk
ich vermute mal dass du noch nicht viel mit Shells gearbeitet hast. Also wenn ich bei jedem stat
cp /hier/da .
copy --sourcefile=/hier/da --targetfile=/hier/dort
schreiben müsste würd ich irgendwann durchdrehen
cp /hier/da .
copy --sourcefile=/hier/da --targetfile=/hier/dort
schreiben müsste würd ich irgendwann durchdrehen
Hoi,
hier ist ein Beispielscript, das optparse verwendet:
http://www.python-forum.de/viewtopic.php?p=52082#52082
hier ist ein Beispielscript, das optparse verwendet:
http://www.python-forum.de/viewtopic.php?p=52082#52082
-
- User
- Beiträge: 18
- Registriert: Samstag 2. Dezember 2006, 12:17
Bei mir sieht es in einem Programm ungefähr so aus:
Code: Alles auswählen
parser = OptionParser('%prog [options] server')
parser.add_option('-p', type='int', dest='port', help='Port', default=9999)
(options, args) = parser.parse_args()
server = args[0]
- gerold
- Python-Forum Veteran
- Beiträge: 5555
- Registriert: Samstag 28. Februar 2004, 22:04
- Wohnort: Oberhofen im Inntal (Tirol)
- Kontaktdaten:
Hi!tuxthekiller hat geschrieben:Bei mir sieht es in einem Programm ungefähr so aus:
Ich will auch noch... Ein nettes Beispiel zum Verwirren:
http://paste.pocoo.org/show/1364/
mfg
Gerold
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.