2 if abfragen kombinieren

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
stigi
User
Beiträge: 64
Registriert: Dienstag 4. April 2006, 07:05

moin

hab folgendes problem in folgendem code:
ich überprüfe auf übergabeparameter beim scriptaufruf. werden weniger als 2 parameter mitgegeben kommt meine aufforderung -help einzugeben.
dabei ist das problem wenn ich "script -help" schreibe, dann sinds ja wiederum zu wenige parameter und die erste if-schleife packt wieder zu:

Code: Alles auswählen

if (len( sys.argv ) <=2 ): 
    print "Zu wenig oder zu viele Uebergabeparameter!"
    print "Verwenden Sie den Parameter -help fuer weitere Informationen"
    raise SystemExit

if (sys.argv[1] in ['-h' , '--h' , '-help' , '--help']):
    print "\nFolgende Parameter mussen uebergeben werden:\n"
    print "--------------------------------------------\n"
    print "Erster Parameter - Auswahl der Pruefoptionen:\n"
    print "1: Standardisierter Durchlauf mit moeglicher manueller Korrektur\n"
    print "2: Wie 1 nur mit Benutzereingabe zur Zeichen- und prozentualen Abweichung\n"
    print "3: Silent Durchlauf - Keine manuelle Korrektur moeglich (nur Protokoll)\n"
    print "4: Wie 3 nur mit Benutzereingabe zur Zeichen- und prozentualen Abweichung\n"
    print "--------------------------------------------\n"
    print "Zweiter Parameter - Kompletter Dateipfad (C:\Temp\... .mdb)\n"
    raise SystemExit
kann ich die erste IF so anpassen, dass das funktioniert ?!

ich dachte an sowas wie

Code: Alles auswählen

if (len( sys.argv ) <=2 ) and (sys.argv[1] not in ['-h' , '--h' , '-help' , '--help']):
aber dat geht nit :?

Code: Alles auswählen

Traceback (most recent call last):
  File "Y:\Mitarbeiter\xxx\pythonwin\checkit.py", line 34, in ?
    if (len( sys.argv ) <=2 and (sys.argv[1] not in ['-h' , '--h' , '-help' , '-
-help'])):
IndexError: list index out of range
[img]http://img73.imageshack.us/img73/9951/stigismiley9cp.gif[/img] read between the lines for better smelling socks [img]http://img73.imageshack.us/img73/9951/stigismiley9cp.gif[/img]
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Optparse ist immer die bessere Lösung -- für alles.

Code: Alles auswählen

#!/usr/bin/env python
# -*- coding: iso-8859-1 -*-

from optparse import OptionParser
import sys

#----------------------------------------------------------------------
def parse_options():
    """
    Wertet die Argumente aus und gibt diese zurueck
    """

    # Usage-Text angeben und Parser-Objekt erzeugen
    usage = \
        "%prog [-d] --test=OPT --path=FILE\n\n" + \
        "    Irgendeine Erklaerung\n" + \
        "    Irgendeine Erklaerung\n" + \
        "    by Stigi 2006 -- stigi@stigi.de\n\n" + \
        "Beispiel: %prog --test=1 --file='C:\\Temp\\xxx.mdb'"
    parser = OptionParser(usage = usage)

    # Optionen hinzufuegen
    parser.add_option(
        "--test",
        dest = "test",
        action = "store",
        metavar = "OPT",
        default = None,
        help = (
            "OPT ist die Pruefoptionen: "
            "1: Standardisierter Durchlauf mit moeglicher manueller Korrektur. "
            "2: Wie 1 nur mit Benutzereingabe zur Zeichen- und prozentualen Abweichung. "
            "3: Silent Durchlauf - Keine manuelle Korrektur moeglich (nur Protokoll). "
            "4: Wie 3 nur mit Benutzereingabe zur Zeichen- und prozentualen Abweichung. "
        )
    )
    parser.add_option(
        "--file",
        dest = "filename",
        action = "store",
        metavar = "FILE",
        default = None,
        help = \
            "FILE ist der Pfad zur Zieldatei."
    )
    parser.add_option(
        "-d", "--debug",
        dest = "debug",
        action = "store_true",
        default = False,
        help = "show debug messages"
    )

    # Optionen parsen
    (options, args) = parser.parse_args()

    # Optionen und Argumente anzeigen
    if options.debug:
        print "Options:"
        print options
        print "-"*70
        print "Arguments:"
        for item in args:
            print item
            print "-"*70

    # Wenn nicht mindestens beide Argumente uebergeben wurden
    # --> Hilfe anzeigen und EXIT
    if (
        (options.test is None) or 
        (options.filename is None)
    ):
        parser.print_help()
        sys.exit(1)

    # Rueckgabe
    return (options, args)


def main():
    # Optionen parsen
    (options, args) = parse_options()
    
    print options
    print args
    
    # Ab jetzt kann mit den Optionen und Argumenten gearbeitet werden.
    

if __name__ == "__main__":
    main()
mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
stigi
User
Beiträge: 64
Registriert: Dienstag 4. April 2006, 07:05

danke erstmal, mir wärs aber lieber wenn man es ohne optpars lösen könnte, da ich mein script heute mittag abgeben muss und ich mich bis dahin nimmer in optparse einarbeiten kann :?

es geht nur noch um dieses eine problem der rest funktioniert
[img]http://img73.imageshack.us/img73/9951/stigismiley9cp.gif[/img] read between the lines for better smelling socks [img]http://img73.imageshack.us/img73/9951/stigismiley9cp.gif[/img]
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

stigi hat geschrieben:...da ich mein script heute mittag abgeben muss
Hi Stigi!

Arbeite dich ein. Das brauchst man ständig.

Code: Alles auswählen

if (
    (len(sys.argv) <= 1) or
    (sys.argv[1] in ('-h' , '--h' , '-help' , '--help')) or
    (len(sys.argv) <= 2)
):
    print "Help"
mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
stigi
User
Beiträge: 64
Registriert: Dienstag 4. April 2006, 07:05

werd ich tun, danke! :) habs bis heute noch nicht gebraucht gehabt, daher isses bissel schwierig das auf die schnelle (bis heute mittag) zu verstehen :roll:
[img]http://img73.imageshack.us/img73/9951/stigismiley9cp.gif[/img] read between the lines for better smelling socks [img]http://img73.imageshack.us/img73/9951/stigismiley9cp.gif[/img]
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Das hier sollte funktionieren:

Code: Alles auswählen

if [ item for item in sys.argv if item in ('-h' , '--h' , '-help' , '--help') ]:
    print "Allgemeine Hilfe"
    sys.exit(1)

if len(sys.argv) <> 3:
    print "Zu wenig Parameter"
    print "------------------"
    print "Allgemeine Hilfe"
    sys.exit(1)
mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
stigi
User
Beiträge: 64
Registriert: Dienstag 4. April 2006, 07:05

funktioniert super! DANKÖ :D
[img]http://img73.imageshack.us/img73/9951/stigismiley9cp.gif[/img] read between the lines for better smelling socks [img]http://img73.imageshack.us/img73/9951/stigismiley9cp.gif[/img]
Antworten