Frage

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 renne "program.py"Ohne Parameter wird args.t als keine gedruckt. Wenn ich reite", wird "program.py -t", args.t wird als keine gedruckt. Wenn ich renne"program.py -t foo", args.t wird als keine gedruckt.

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

War es hilfreich?

Lösung

Nicht passieren ['-t'] zu analysieren_args. Mach einfach:

args = parser.parse_args()

Alle Argumente, die Sie an Parse_args übergeben, werden anstelle Ihrer Befehlszeile verwendet. Mit diesem Argument spielt es also keine Rolle, welche Befehlszeile Sie verwenden, Argparse sieht es nie.

Andere Tipps

Die Linie

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

Übergibt die Befehlszeilenargumente ["-t"] an den Parser. Sie möchten mit den tatsächlichen Befehlszeilenargumenten arbeiten. Ändern Sie also die Zeile auf

args = parser.parse_args()

Verwenden Sie das const Keyword -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

Das Ausführen ergibt:

% test.py          # handled by `default`
baz
% test.py -t       # handled by `const`
baz
% test.py -t blah
blah
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top