Seite 1 von 1

getopt command Line input

Verfasst: Mittwoch 4. März 2015, 09:10
von Karpfen
Hallo

irgendwie hab ich hier einen Logic bug
Ich möchte von der Comandline 5-6 Werte einlesen. Sobald aber die Option -x gesetzt wird sollen die Werte manuell gesetzt werden. Solange -x nicht angegeben wird soll das Programm die angegebenen Werte importieren.


Ihrgend Wie sehe ich gerade den Baum vor lauter Bäumen nicht mehr :-( oder kann ich aus dieser Schleife eventuell mit einem goto aussteigen?

Code: Alles auswählen

def main(argv):
   Processor = ''
   input = ''
   output = ''
   Name = ''
   
   try:
      opts, args = getopt.getopt(argv,"xh:p:y:o:n:",["proc=","ifile=","ofile=","name="])
   except getopt.GetoptError:
      print 'test_.py (-x) -p <processor> -y <input> -0 <output> -n <pname>'
  
   for opt, arg in opts:
      if opt == '-x':
         processor = Name
         id = '08150815' 
         if opt in ("-p", "--ppath"):
            Processor = arg
         elif opt in ("-o", "--ofile"):
            output = arg
         elif opt in ("-n", "--pname"):
            Name = arg 
      else opt == '-h':
         print 'test_.py (-x) -p <processor> -y <input> -0 <output> -n <pname>'
         sys.exit()
      elif opt in ("-p", "--ppath"):
         Processor = arg
      elif opt in ("-y", "--yfile"):
         input = arg
      elif opt in ("-o", "--ofile"):
         output = arg
      elif opt in ("-n", "--pname"):
         Name = arg 

   print 'Processor :', Processor
   print 'Input File :', yamlfile
   print 'Output File :', output_path
   print 'Name :', Name_Prozessor

oder gibt es hier zu einen schönere Methode ?

Vielen Dank im Vorraus

Re: getopt command Line input

Verfasst: Mittwoch 4. März 2015, 09:22
von Sirius3
@Karpfen: die schönere Möglichkeit wäre es, argparse zu verwenden. Die Dokumentation hat sehr gute Beispiele.

Re: getopt command Line input

Verfasst: Mittwoch 4. März 2015, 14:07
von Karpfen
So nun habe ich mich mal etwas mit dem argparse package beschäftigt:

nun habe ich allerdings immer noch ein Problem

wenn ich die Option 1 oder 2 Wähle scheint alles was mit argparse zu tun hat zu funktionieren allerdings übergitb das Tool diese args.xxxxxx Parameter nicht an die variable woran kann das liegen ?

Code: Alles auswählen

import argparse

parser = argparse.ArgumentParser(description='test_aufruf.py  -x <option> -p <processor> -y <yamlfile> -0 <output> -n < name>')

parser.add_argument("-x", "--option", dest="option", help = "1 oder 2", metavar = "Option")
parser.add_argument("-p", "--processor", dest="processor", help = "Angeben der Processor ", metavar = "Processor")
parser.add_argument("-o", "--output", dest="output_path", help = " output  angeben", metavar= "Output")
parser.add_argument("-y", "--yaml", dest="input", help = " input file angeben", metavar= "Input")
parser.add_argument("-n", "--name", dest="Name", help = " Name angeben", metavar= "Name")

args = parser.parse_args()
option=args.option
print option

if option == 1:
   processor = args.Processor
   yamlfile = args.input
   output_path = args.output
   Name_Prozessor = args.Name
elif option == 2:
   processor = args.Processor
   output_path = args.output
   Name_Processor = args.Name
   
print processor
print input
print output
print Name

Re: getopt command Line input

Verfasst: Mittwoch 4. März 2015, 14:24
von Sirius3
@Karpfen: args.option ist bei Dir ein String, Du mußt also type=int angeben, damit argparse das Argument in eine Zahl umwandelt. Denn Sinn von Option habe ich allerdings noch nicht verstanden.
Wenn etwas in allen if-Zeigen vorkommt, kann man es auch aus dem if heraus ziehen. Das Kopieren in andere Variablen ist normalerweise unnötig. Entweder Du rufst Funktionen auf, bei denen die args-Optionen als Parameter übergeben werden, oder Du benutzt im Hauptprogramm args direkt.

Re: getopt command Line input

Verfasst: Mittwoch 4. März 2015, 14:36
von BlackJack
@Karpfen: Bei `Argparser` brauchst Du als `description` nicht die ganzen Optionen angeben. Das ist ja einer der Vorteile von `argparse` das man eine automatisch generierte Hilfe mit ``-h`` bekommt.

Vielleicht auch noch mal grundsätzlich etwas zu Optionen: Die heissen so weil sie optional sind, man sie also weglassen kann. Was im Umkehrschluss bedeutet das etwas was man angeben *muss* semantisch keine Option mehr ist sondern ein Argument.

Re: getopt command Line input

Verfasst: Mittwoch 4. März 2015, 15:03
von Karpfen
vielen dank für die guten beschreibenungne jetzt habe ich es verstanden :-)