2016-04-26 5 views
0

ich einige Probleme mit mit argparse immer korrekt zu funktionieren. Früher hätte mein Skript wie folgt ausgeführt werden:Fehler bei argparse

script.py <input_file(s)> <output_filename>

mit Code, der so aussah:

cell_list_input = sys.argv[1:] 
cell_list_output = sys.argv[len(cell_list_input)] 
cell_list_input = cell_list_input[:len(cell_list_input)-1] 

Aber ich möchte einige Argument Parsing hinzufügen nur um es besser lesbar und verwendbar. Idealerweise würde das Format mit den folgenden Optionen ähneln:

script.py -i <input_file(s)> -o <output_filename>

script.py --input_list <input_file(s)> --output <output_filename>

Das argparse Äquivalent Ich versuche jetzt sieht aus wie dieses Recht umzusetzen:

parser = argparse.ArgumentParser() 
parser.add_argument('-i', '--input_list', action='append', dest='input_list', default=[], help='Input list of cell names') 
parser.add_argument('-o', '--output', action='store', dest='output', help='Output file destination/name') 
cli = parser.parse_args() 

Ich weiß, Ich mache etwas falsch, aber ich kann nicht herausfinden, was. Jede Hilfe wird geschätzt. Vielen Dank!

+1

, was der Fehler Sie bekommen dann? – somada141

+0

Also, wo ist '-i'? Und was meinst du * "irgendwas falsches" *? – jonrsharpe

+0

Sorry, Fehler kommt von der '-i' Option:' error: unrecognised arguments: 'dann könnten alle Argumente in '-i' – Jonathan

Antwort

1

Sie müssen nargs für Ihre Eingabedateiliste angeben. Versuchen Sie folgendes:

parser.add_argument('-i', '--input_list', nargs="+", action='append', dest='input_list', default=[], help='Input list of cell names') 

Komplettes Beispiel:

import argparse 
parser = argparse.ArgumentParser() 
parser.add_argument('-i', '--input_list', nargs="+", default=[], help='Input list of cell names') 
parser.add_argument('-o', '--output', help='Output file destination/name') 
cli = parser.parse_args() 
print cli 

Ergebnis:

$ python i.py -i a 
Namespace(input_list=['a'], output=None) 
$ python i.py -i a b c -o d 
Namespace(input_list=['a', 'b', 'c'], output='d') 
+0

Hmm ... jetzt ist meine cli.cell_list am Ende eine liste einer liste ... eine möglichkeit, das zu lösen, oder erstellt die natur immer eine liste einer liste? – Jonathan

+0

Befreien Sie sich von "action =" append "'. Siehe meine letzte Änderung. –

+0

Das hat funktioniert, danke! – Jonathan