2011-12-10 4 views
1

Мне нужна помощь относительно использования argparse. Я хочу добиться того, что мне нужно передать только один аргумент, это может быть одно из следующих: --k, --r, --b, --p,(ignore the rest). Если количество аргументов не равно 1, напечатайте «использование» и закройте. Также программа должна знать, какой флаг передан, чтобы создать соответствующий объект. Я несколько раз пробовал, но я не работаю, может ли кто-нибудь дать мне намек на это? Благодарю.нужна помощь для аргумента командной строки python с помощью argparse

+3

«Я пробовал несколько раз, но я не работаю»: Можете ли вы опубликовать то, что вы попробовали, и объяснить, что именно не работает? –

ответ

4

Что вам нужно использовать для достижения этой цели является mutually exclusive group:

import argparse 

parser = argparse.ArgumentParser() 
group = parser.add_mutually_exclusive_group() 
group.add_argument('-k', action='store_true') 
group.add_argument('-r', action='store_true') 
group.add_argument('-b', action='store_true') 
group.add_argument('-p', action='store_true') 
parser.parse_args() 

Как видно в приведенном ниже примере, только один вариант взаимоисключающим группы допускается в то же время :

$ python test.py -k -r -b -p 
usage: test.py [-h] [-k | -r | -b | -p] 
test.py: error: argument -r: not allowed with argument -k 

чтобы проверить, какой флаг был принят, вам просто нужно смотреть на argparse.Namespace объекта, возвращенного parse_args методом (флаг р assed будет установлено значение True).

+0

Хорошая работа! Кажется, что я полностью ошибаюсь, THX для образца! –

3

Как насчет того, чтобы не использовать argparse? Это не кажется действительно необходимым.

if len(sys.argv) != 2: 
    print_usage() 
arg = sys.argv[1] 
if arg not in ["--k", "--r", "--b", "--p"]: 
    print_usage() 
# Do whatever you want with arg 
+0

Это прекрасно! –

Смежные вопросы