Необязательный параметр командной строки в Python - PullRequest
2 голосов
/ 16 февраля 2012

Я пытаюсь получить необязательные параметры командной строки для скрипта Python (2.7 под Windows), и все идет не так гладко.Код:

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

Если я запускаю «program.py» без параметров, args.t печатается как None.Если я запускаю «program.py -t», args.t печатается как None.Если я запускаю «program.py -t foo», args.t печатается как None.

Почему я не получаю значение из командной строки в args.t?

Ответы [ 3 ]

4 голосов
/ 16 февраля 2012

Не передавайте ['-t'] в parse_args. Просто сделай:

args = parser.parse_args()

Любые аргументы, которые вы передаете parse_args, используются вместо вашей командной строки. Поэтому с этим аргументом не имеет значения, какую командную строку вы используете, argparse никогда не увидит ее.

2 голосов
/ 16 февраля 2012

Строка

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

передает аргументы командной строки ["-t"] парсеру.Вы хотите работать с фактическими аргументами командной строки, поэтому измените строку на

args = parser.parse_args()
1 голос
/ 16 февраля 2012

Использование аргумента const ключевого слова :

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

Запуск его приводит к:

% test.py          # handled by `default`
baz
% test.py -t       # handled by `const`
baz
% test.py -t blah
blah
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...