Argumente einlesen beim Skriptstart

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.
DaSch
User
Beiträge: 72
Registriert: Mittwoch 28. März 2007, 20:04
Kontaktdaten:

Argumente einlesen beim Skriptstart

Beitragvon DaSch » Sonntag 8. April 2007, 19:39

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
Benutzeravatar
birkenfeld
Python-Forum Veteran
Beiträge: 1603
Registriert: Montag 20. März 2006, 15:29
Wohnort: Die aufstrebende Universitätsstadt bei München

Beitragvon birkenfeld » Sonntag 8. April 2007, 19:40

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.
Dann lieber noch Vim 7 als Windows 7.

http://pythonic.pocoo.org/
DaSch
User
Beiträge: 72
Registriert: Mittwoch 28. März 2007, 20:04
Kontaktdaten:

Beitragvon DaSch » Sonntag 8. April 2007, 19:44

okay danke
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Sonntag 8. April 2007, 21:39

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 Modvoice
DaSch
User
Beiträge: 72
Registriert: Mittwoch 28. März 2007, 20:04
Kontaktdaten:

Beitragvon DaSch » Sonntag 8. April 2007, 22:28

kann ich in optparse auch irgendwie sagen dass das letzte Argument ein Dateiname ist?
Also dass ich entweder
skriptname [optionen] dateiname
oder
skriptname dateiname
Benutzeravatar
Masaru
User
Beiträge: 425
Registriert: Mittwoch 4. August 2004, 22:17

Beitragvon Masaru » Sonntag 8. April 2007, 23:09

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.
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5554
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Telfs (Tirol)
Kontaktdaten:

Beitragvon gerold » Montag 9. April 2007, 00:12

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
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
EnTeQuAk
User
Beiträge: 986
Registriert: Freitag 21. Juli 2006, 15:03
Wohnort: Berlin
Kontaktdaten:

Beitragvon EnTeQuAk » Montag 9. April 2007, 00:45

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
DaSch
User
Beiträge: 72
Registriert: Mittwoch 28. März 2007, 20:04
Kontaktdaten:

Beitragvon DaSch » Montag 9. April 2007, 01:17

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
EnTeQuAk
User
Beiträge: 986
Registriert: Freitag 21. Juli 2006, 15:03
Wohnort: Berlin
Kontaktdaten:

Beitragvon EnTeQuAk » Montag 9. April 2007, 01:23

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
DaSch
User
Beiträge: 72
Registriert: Mittwoch 28. März 2007, 20:04
Kontaktdaten:

Beitragvon DaSch » Montag 9. April 2007, 01:35

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
rafael
User
Beiträge: 189
Registriert: Mittwoch 26. Juli 2006, 16:13

Beitragvon rafael » Montag 9. April 2007, 09:28

Hoi,

hier ist ein Beispielscript, das optparse verwendet:
http://www.python-forum.de/viewtopic.php?p=52082#52082
tuxthekiller
User
Beiträge: 18
Registriert: Samstag 2. Dezember 2006, 12:17

Beitragvon tuxthekiller » Montag 9. April 2007, 16:35

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]
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5554
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Telfs (Tirol)
Kontaktdaten:

Beitragvon gerold » Montag 9. April 2007, 16:58

tuxthekiller hat geschrieben:Bei mir sieht es in einem Programm ungefähr so aus:

Hi!

Ich will auch noch... :roll: Ein nettes Beispiel zum Verwirren: :twisted:

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.

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder