Seite 1 von 1
Argumente einlesen beim Skriptstart
Verfasst: Sonntag 8. April 2007, 19:39
von DaSch
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
Verfasst: Sonntag 8. April 2007, 19:40
von birkenfeld
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.
Verfasst: Sonntag 8. April 2007, 19:44
von DaSch
okay danke
Verfasst: Sonntag 8. April 2007, 21:39
von Leonidas
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.

Verfasst: Sonntag 8. April 2007, 22:28
von DaSch
kann ich in optparse auch irgendwie sagen dass das letzte Argument ein Dateiname ist?
Also dass ich entweder
skriptname [optionen] dateiname
oder
skriptname dateiname
Verfasst: Sonntag 8. April 2007, 23:09
von Masaru
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.
Verfasst: Montag 9. April 2007, 00:12
von gerold
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
Hi DaSch!
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

Verfasst: Montag 9. April 2007, 00:45
von EnTeQuAk
Alles, was an das Programm übergeben und nicht als Option gekennzeichtet wurde, wird als Argument erkannt.
Was sehr genial ist, wie ich finde
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
Verfasst: Montag 9. April 2007, 01:17
von DaSch
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
Verfasst: Montag 9. April 2007, 01:23
von EnTeQuAk
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.
Ansonsten wüsste ich nicht, was an
`` --file=datei.txt ``
unbefriedigend sein soll. Es ist jedenfalls sprechend und daher eigentlich einfach.
MfG EnTeQuAk
Verfasst: Montag 9. April 2007, 01:35
von DaSch
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
Verfasst: Montag 9. April 2007, 09:28
von rafael
Hoi,
hier ist ein Beispielscript, das optparse verwendet:
http://www.python-forum.de/viewtopic.php?p=52082#52082
Verfasst: Montag 9. April 2007, 16:35
von tuxthekiller
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]
Verfasst: Montag 9. April 2007, 16:58
von gerold
tuxthekiller hat geschrieben:Bei mir sieht es in einem Programm ungefähr so aus:
Hi!
Ich will auch noch...

Ein nettes Beispiel zum Verwirren:
http://paste.pocoo.org/show/1364/
mfg
Gerold
