2 Stimmen

Optionale Befehlszeilenparameter in Python

Ich versuche, optionale Befehlszeilenparameter für ein Python-Skript (2.7 unter Windows) abzurufen, und die Dinge laufen nicht reibungslos. Der Code ist:

parser = argparse.ArgumentParser(description = 'Process display arguments')
parser.add_argument('-t', nargs = '?', default = 'baz')
args = parser.parse_args(['-t'])
print args.t

Wenn ich " program.py " ohne Parameter ausführt, wird args.t als None ausgegeben. Wenn ich " program.py -t ", wird args.t als None ausgegeben. Wenn ich " program.py -t foo ", wird args.t als None gedruckt.

Warum erhalte ich den Wert aus der Befehlszeile nicht in args.t?

4voto

Weeble Punkte 15723

Nicht ablehnen ['-t'] zu parse_args. Tun Sie es einfach:

args = parser.parse_args()

Alle Argumente, die Sie an parse_args übergeben, werden anstelle Ihrer Befehlszeile verwendet. Mit diesem Argument ist es also egal, welche Befehlszeile Sie verwenden, argparse sieht sie nie.

2voto

David Robinson Punkte 75919

Die Linie

args = parser.parse_args(["-t"])

ist die Übergabe der Befehlszeilenargumente ["-t"] an den Parser. Sie wollen mit den tatsächlichen Befehlszeilenargumenten arbeiten, also ändern Sie die Zeile in

args = parser.parse_args()

1voto

unutbu Punkte 769083

Verwenden Sie die konstantes Schlüsselwort-Argument :

import argparse
parser = argparse.ArgumentParser(description = 'Process display arguments')
parser.add_argument('-t', nargs = '?', const = 'baz', default = 'baz')
args = parser.parse_args()
print args.t

Die Ausführung ergibt sich:

% test.py          # handled by `default`
baz
% test.py -t       # handled by `const`
baz
% test.py -t blah
blah

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