4 Stimmen

Python optparse funktioniert bei mir nicht.

Ich lerne derzeit, wie man das Python optparse-Modul verwendet. Ich versuche das folgende Beispielskript, aber die args-Variable ist leer. Ich habe es mit Python 2.5 und 2.6 versucht, aber ohne Erfolg.

import optparse

def main():
  p = optparse.OptionParser()
  p.add_option('--person', '-p', action='store', dest='person', default='Me')
  options, args = p.parse_args()

  print '\n[Debug]: Print options:', options
  print '\n[Debug]: Print args:', args
  print

  if len(args) != 1:
    p.print_help()
  else:
    print 'Hallo %s' % options.person

if __name__ == '__main__':
  main() 

Ausgabe:

>C:\Scripts\example>hello.py -p Kelvin

[Debug]: Print options: {'person': 'Kelvin'}

[Debug]: Print args: []

Verwendung: hello.py [options]

Optionen: -h, --help zeige diese Hilfe-Nachricht und beende -p PERSON, --person=PERSON

7voto

Mark Rushakoff Punkte 236626

Die Variable args enthält alle Argumente, die nicht einer Option zugewiesen wurden. Ihr Code funktioniert in der Tat ordnungsgemäß, indem er Kelvin der Variable person zugewiesen hat.

Wenn Sie versuchen würden, hello.py -p Kelvin file1.txt auszuführen, würden Sie festgestellt, dass person immer noch den Wert "Kelvin" zugewiesen hat, und dann würden Ihre args "file1.txt" enthalten.

Siehe auch die Dokumentation zu optparse:

parse_args() gibt zwei Werte zurück:

  • options, ein Objekt, das Werte für alle Ihre Optionen enthält - z.B. wenn --file ein einzelnes Zeichenfolgenargument entgegennimmt, dann wird options.file der vom Benutzer angegebene Dateiname sein oder None, wenn der Benutzer diese Option nicht angegeben hat
  • args, die Liste der übrig gebliebenen positionsbezogenen Argumente nach dem Parsen der Optionen

1voto

grzaks Punkte 1374

Laut der Hilfe von optparse:

"Bei Erfolg wird ein Paar (Werte, args) zurückgegeben, wobei 'values' eine Values-Instanz ist (mit allen Ihren Optionswerten) und 'args' die Liste der nach dem Parsen von Optionen übrig gebliebenen Argumente ist."

Versuchen Sie hello.py -p Kelving abcd - 'Kelvin' wird von optparse geparst, 'abcd' landet in der args-Variable, die von parse_args zurückgegeben wird

0voto

moshez Punkte 33946

Hinweis: "Optionen" ist ein Wörterbuch mit den von Ihnen hinzugefügten Optionen. "Args" ist eine Liste mit den nicht analysierten Argumenten. Sie sollten sich nicht die Länge von "args" ansehen. Hier ist ein Transkript zur Veranschaulichung:

moshez-mb:profil administrator$ cat foo
import optparse

def main():
    p = optparse.OptionParser()
    p.add_option('--person', '-p', action='store', dest='person', default='Ich')
    options, args = p.parse_args()
    print '\n[Debug]: Drucke Optionen:', options
    print '\n[Debug]: Drucke args:', args
    print
    if len(args) != 1:
        p.print_help()
    else:
        print 'Hallo %s' % options.person

if __name__ == '__main__':
    main()
moshez-mb:profil administrator$ python foo

[Debug]: Drucke Optionen: {'person': 'Ich'}

[Debug]: Drucke args: []

Verwendung: foo [Optionen]

Optionen:
  -h, --help            zeige diese Hilfe-Nachricht und beende
  -p PERSON, --person=PERSON
moshez-mb:profil administrator$ python foo -p Moshe

[Debug]: Drucke Optionen: {'person': 'Moshe'}

[Debug]: Drucke args: []

Verwendung: foo [Optionen]

Optionen:
  -h, --help            zeige diese Hilfe-Nachricht und beende
  -p PERSON, --person=PERSON
moshez-mb:profil administrator$ python foo -p Moshe Argument

[Debug]: Drucke Optionen: {'person': 'Moshe'}

[Debug]: Drucke args: ['Argument']

Hallo Moshe
moshez-mb:profil administrator$

0voto

Rama Punkte 1
import ast

(options, args) = parser.parse_args()
noargs = ast.literal_eval(options.__str__()).keys()
if len(noargs) != 1:
    parser.error("FEHLER: FALSCH ANZAHL VON ARGUMENTEN")
    sys.exit(1)

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X