programm mit argumenten aufrufen

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.
Antworten
DER Olf
User
Beiträge: 283
Registriert: Mittwoch 24. Dezember 2003, 19:32

hi.

was ich mich, seitdem ich linux benutze immer wieder frage:

was muss ich in mein script schreiben, damit ich es mit einem argument aufrufen kann, z.b. einer datei, und diese dann geladen wird?

beispiel:

python mein_programm.py test.txt

bisher hab ich es immer noch mit einer eingabe gelöst:
raw_input("Den Dateinamen eingeben: ")


mfg

Olf
mawe
Python-Forum Veteran
Beiträge: 1209
Registriert: Montag 29. September 2003, 17:18
Wohnort: Purkersdorf (bei Wien [Austria])

Hi!

Meinst Du sowas?:

Code: Alles auswählen

import sys
x = sys.argv[1]
print x
PS: sys.argv[0] enthält den Namen des Scripts, alle weiteren Elemente in argv sind die Kommandozeilenargumente.

Gruß

mawe
DER Olf
User
Beiträge: 283
Registriert: Mittwoch 24. Dezember 2003, 19:32

genau.....danach hab ich gesucht.

danke!!
Milan
User
Beiträge: 1078
Registriert: Mittwoch 16. Oktober 2002, 20:52

Hi. Noch interessanter dürfte für dich das Modul getopt sein... damit kannst du deinen Progammen beibringen, sich mit wirklichen Optionen aufrufen zu lassen...
DER Olf
User
Beiträge: 283
Registriert: Mittwoch 24. Dezember 2003, 19:32

das kann ich doch sicher auch mit

Code: Alles auswählen

if sys.argv[1] == "-o":
    pass
elif sys.argv[1] == "-e":
    pass
machen, oder?

mfg

Olf
hans
User
Beiträge: 728
Registriert: Sonntag 22. September 2002, 08:32
Wohnort: Sauerland
Kontaktdaten:

kannst du, aber bei einigen Programmen sind die Optionen -abc gleich beduetend mit -a -b -c. Das dürfte dann mit deinem Lösungsvorschlag schwierig werden.

Hans
Milan
User
Beiträge: 1078
Registriert: Mittwoch 16. Oktober 2002, 20:52

Hi. Nicht wirklich. Denn du weißt ja nicht, in welcher Reihenfolge die Parameter angegeben werden. Möglich sind z.B.:
python mein_programm.py -o -e
python mein_programm.py -e -o
python mein_programm.py -oe
python mein_programm.py -eo

etc.

Mal ist len(sys.argv)==3 und mal 2 und trotzdem wurden immer dieselben optionen übergeben. Außerdem ermöglicht getopt die Übergabe von "richtigen" Optionen (--help). Für Mehr als nur ein Parameter empfiehlt es sich also, getopt zu benutzen. Für deine Belange oben muss man dass aber nicht unbedingt machen.
DER Olf
User
Beiträge: 283
Registriert: Mittwoch 24. Dezember 2003, 19:32

danke.
das mit dem getopt werd ich mir mal merken, jetzt reicht erstmal noch sys.argv aus.

mfg

Olf
fs111
User
Beiträge: 170
Registriert: Samstag 15. November 2003, 11:42
Kontaktdaten:

Viel besser als getopt ist IMHO optparse, was früher optik hieß:

http://python.org/doc/current/lib/module-optparse.html

fs111
DER Olf
User
Beiträge: 283
Registriert: Mittwoch 24. Dezember 2003, 19:32

hm..........der code sieht schonmal viel besser aus als mit getopt!!!
aber wie gesagt, im moment noch belanglos...

mfg

Olf
NOTZE
User
Beiträge: 106
Registriert: Mittwoch 21. Januar 2004, 20:28

Also ich verwende auch gerade das Modul optparse und ich muss sagen es
ist recht einfach damit zu arbeiten und ich denke es ist einfacher als getopt.

€dit:
Wenn ich jetzt die Option -f erstelle als zum aufrufen einer datei und dieser parameter
wird nicht angegeben was wird dann übergeben?
ich hatte schon sowas hier:

Code: Alles auswählen

if options.filename == "":
		#etwas code
		
aber das geht irgendwie nicht

und dann noch eine frage: Wie kann ich denn jetzt noch eine kurze beschreibung
des Programmes hinzufügen wenn --help aufgerufen wird, wie bei ls oder so?
arghargh
User
Beiträge: 81
Registriert: Donnerstag 4. September 2008, 22:26

Ich habe gerade getopt von

http://www.diveintopython.org/scripts_a ... l#d0e26982

versucht, aber unter Windows scheint das nicht zu funktionieren, wenn man das Skript direkt aufruft, und cmd den Aufruf des Interpreters überlässt.

Kann das sein oder liegt der Fehler bei mir?

Edit:

optparse klappt auf Anhieb. Danke für den Tipp (auch wenn er schon 4 Jahre alt ist ;-).
Antworten