нужна помощь для аргумента командной строки Python, используя argparse - PullRequest
1 голос
/ 11 декабря 2011

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

Ответы [ 2 ]

4 голосов
/ 11 декабря 2011

Что необходимо использовать для достижения этой цели: взаимоисключающая группа :

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 (переданный флаг будет установлен на True).

3 голосов
/ 11 декабря 2011

Как насчет того, чтобы вообще не использовать 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
...