Argumente von der Befehlszeile python bekommen

Ich versuche, drei Argumente von der Befehlszeile zu bekommen:

-o (for outputfile) -k (number of clusters) -l (data to be clustered) 

Also schrieb ich das.

 def get_input(): print 'ARGV :', sys.argv[1:] options, remainder = getopt.getopt(sys.argv[1:], 'o:v:k:l', ['output=', 'verbose', 'k_clust=', 'limit=']) print "options ",options file_flag , k_flag, count_flag = False, False,False for opt, arg in options: print opt if opt in ('-o', '--output'): print "here ", opt, arg output_filename = arg o_flag = True if opt in ('-v', '--verbose'): verbose = True if opt == '--version': version = arg if opt in ('-k','--k_clust'): print "here", opt, arg k_clust = arg k_flag = True if opt in ('-l','--limit'): kcount = arg assert kcount!=0 and kcount!= '' print "limit ", arg count_flag = True if k_flag == False: sys.exit(" no cluster specified, will be exiting now") if o_flag == False: print "using default outfile name ",output_filename if count_flag == False: kcount = 10000000 return output_filename, k_clust,kcount 

Alles funktioniert gut, außer der -l-Fahne, wenn mein Kommandozeilen-Befehl das ist:

 $python foo.py -o foo.txt -k 2 -l 2 

Und der Druck argv druckt

 ARGV : ['-o', 'demo.txt', '-k', '2', '-l', '2'] 

Aber die Optionen sind:

 options [('-o', 'demo.txt'), ('-k', '2'), ('-l', '')] 

Beachten Sie, dass im Feld "l" nichts analysiert wird. Wat bin ich falsch gemacht? Vielen Dank

2 Solutions collect form web for “Argumente von der Befehlszeile python bekommen”

getopt ist ein ziemlich altes Modul. Wenn Sie Python2.7 haben, verwenden Sie argparse . Wenn du eine etwas ältere Version von Python> = 2.3 hast, kannst du trotzdem argparse installieren :

Mit

 import argparse parser=argparse.ArgumentParser() parser.add_argument('-o', help = 'outputfile') parser.add_argument('-k', help = 'number of clusters') parser.add_argument('-l', help = 'data to be clustered') args=parser.parse_args() print(args) 

Laufen

 test.py -o foo.txt -k 2 -l 2 

Erträge

 Namespace(k='2', l='2', o='foo.txt') 

Es ist, weil in Ihrem shortopts Parameter: 'o: v: k: l', das "l" muss von einem Doppelpunkt gefolgt werden ":"

Da es nicht ist, wird die "2" in die Restvariable gesetzt.

Python ist die beste Programmiersprache der Welt.