Optparse Problem

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.
Flo668
User
Beiträge: 39
Registriert: Mittwoch 23. Juli 2008, 10:41

Optparse Problem

Beitragvon Flo668 » Mittwoch 23. Juli 2008, 11:53

Hi liebe Forenteilnehmer.

Ich soll ein Script warten und leider hat der Schreiber es mittels "Optparse" ein wenig (für mich) undurchsichtig gemacht.

folgendes ist der Inhalt:

Code: Alles auswählen

import optparse
    parser = optparse.OptionParser(__doc__.strip())

    parser.add_option('-v', '--verbose', action='count',
                      default=0,
                      dest='verbose_plus',
                      help="Increase verbosity.")
    parser.add_option('-q', '--silent', '--quiet', action='count',
                      default=0,
                      dest='verbose_neg',
                      help="Silent operation, no output unless error.")

    parser.add_option('-n', '--dry-run', action='store_true',
                      help="Dry run, do not really import.")
    parser.add_option('-u', '--user', action='store',
                      default='Administrator',
                      help="Import as given user.")
    parser.add_option('-p', '--project', action='store',
                      default='Administration',
                      help="Import in given project.")

    parser.add_option('-d', '--destination-folder', action='store',
                      help="Specify destination folder (relative or not to the "
                      "project import root folder).")
    parser.add_option('-a', '--absolute', '--no-relative-root',
                      action='store_true', dest='absolute', default=False,
                      help="The destination folder root is not relative to "
                      "the project import root folder.")

    opts, args = parser.parse_args()
   
    dbname, srcdns = args[0], args[1:]



Meine einfache Frage:

was genau steht in srcdns bzw. was ist der Unterschied zwischen args[0] und args [1:] und was soll der Doppelpunkt im Arrayindex?

Ich komme nicht wirklich aus der Python Welt, sondern hatte es bislang eher mit Windows Anwendungsentwicklung unter C++ und C# zu tun, da ist eben manches anders....

Danke fuer Eure Hilfe!
BlackJack

Beitragvon BlackJack » Mittwoch 23. Juli 2008, 11:59

Die Frage hat überhaupt nichts mit `optparse` zu tun. Die Slice-Syntax ist Python-Grundwissen. Arbeite mal das Tutorial aus der Dokumentation durch und füge ein paar ``print``-Anweisungen in das Programm ein. `type()` verrät Dir was für einen Typ ein Objekt hat.
Flo668
User
Beiträge: 39
Registriert: Mittwoch 23. Juli 2008, 10:41

Beitragvon Flo668 » Mittwoch 23. Juli 2008, 12:21

Danke soweit. nachdem ich wusste, dass es sich "Slice Syntax" nennt, konnte ich heruasfinden, was man damit so anstellen kann.

Allerdings habe ich doch eher ein Problem mit optparse.

Ich habe auch anhand der Dokumentation nicht wirklich verstanden, wie der Unterschied zwischen Optionen und Argumenten funktionieren soll bzw. wie optparse den Unterschied macht.

wenn ich also

options, args = parser.parse.args()

sage und als Rueckgabewerte zwei Werte, naemlich Optionen und Argumente bekommen. Dann sehe ich nicht ganz, wo der Unterschied liegt.

So weit ich lt. Beschreibung auf python.org denke verstanden zu haben nimmt optparse als Optionen alle Optionen an und als Argumente "the list of positional arguments leftover parsing options". Ich verstehe nicht, was da noch übrig bleiben soll, nachdem doch alles, was ich unter add_option auch noch option genannt habe in options eingelesen wurde.

Die Funktionsweise ist mir nicht ganz schluessig.
lunar

Beitragvon lunar » Mittwoch 23. Juli 2008, 12:31

Was genau hast du daran nicht verstanden?
http://docs.python.org/lib/optparse-background.html

Kurzzusammenfassung: Optionen sind die mit dem Strich oder den Doppelstrich davor. Sie steuern das Verhalten des Kommandos und aktivieren optionales Verhalten. Die Option "-r" für das "cp"-Kommando aktiviert beispielsweise rekursives Kopieren.

Argumente sind die Teile ohne Bindestrich, sie sind für das Kommando dringend notwendig: "cp /source/file /target/file" beispielsweise. Cp ohne Angabe der Quelle oder des Ziels ist nicht wirklich sinnvoll ;)

Was die von "parse_args" zurückgegebenen Objekte bedeuten, findest du heraus, in dem du die Doku zu optparse (insbesondere auch das Tutorial) liest und mal im Interpreter damit rumspielst.
Flo668
User
Beiträge: 39
Registriert: Mittwoch 23. Juli 2008, 10:41

Beitragvon Flo668 » Mittwoch 23. Juli 2008, 12:45

Das Tutorial hatte ich ja gelesen, bin nur nicht schalu daraus geworden. Jetzt verstehe ich es aber.

Mir war nicht klar, dass ich dem Skript auch andere Dinge beim Start mitgeben könnte, als die aufgelisteten Optionen.

Wer ist online?

Mitglieder in diesem Forum: /me