Seite 1 von 1

2 if abfragen kombinieren

Verfasst: Freitag 9. Juni 2006, 07:55
von stigi
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

Verfasst: Freitag 9. Juni 2006, 08:28
von gerold
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
:-)

Verfasst: Freitag 9. Juni 2006, 08:36
von stigi
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

Verfasst: Freitag 9. Juni 2006, 08:39
von gerold
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
:-)

Verfasst: Freitag 9. Juni 2006, 08:42
von stigi
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:

Verfasst: Freitag 9. Juni 2006, 08:49
von gerold
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
:-)

Verfasst: Freitag 9. Juni 2006, 09:22
von stigi
funktioniert super! DANKÖ :D