2012-02-16 1 views
2

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

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 печатается как «Нет». Если я запускаю «program.py -t foo», args.t печатается как «Нет».

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

ответ

4

Не пропустите ['-t'] в parse_args. Просто выполните:

args = parser.parse_args() 

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

+0

И теперь, как и сейчас, «-h» работает! Я думаю, что я запутался, когда примеры переместились из «print parser.parse_args (['-t']», чтобы фактически использовать его в скрипте. –

1

Используйте 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 

Забегая дает:

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

Это объясняется в документации: Обратите внимание, что для необязательных аргументов есть дополнительный случай - строка опций присутствует, но не сопровождается аргументом командной строки. В этом случае будет произведено значение из const. – jcollado

2

Линия

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

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

args = parser.parse_args()