2015-05-26 4 views
1

У меня есть некоторые трудности с использованием argparse. У меня есть приложение с графическим интерфейсом, который я хочу использовать так:argparse с различными режимами

  1. GUI.exe => приложение с открытым GUI
  2. GUI.exe -s file_directory1 => играть GUIX.exe без открыть его
  3. GUI .exe -s file_directory1 -o file_directory2 => такой же, как 2.

не разрешается делать: gui.exe -o file_directory

Я знаю, как это сделать 1 и 2, но не 3

Есть ли кто-нибудь, кто уже сделал это или может дать мне некоторые подсказки?

Благодарим вас за помощь.

ответ

1

Это невозможно добиться того, что вы хотите просто использовать add_argument и без ручной проверки. Как maggick уже сказал, вы всегда можете просто проверить после разбора командной строки, используется ли пользователь правильные параметры, вручную делают так:

if args.option1 and not args.option2: 
    parser.error('some error') 

Однако я считаю, ваш -s вариант действует немного как subcommand , Если это так, было бы лучше использовать add_subparsers и имеют file_directory1 в качестве необходимого аргумента для него в то время как -o как его вариант:

import argparse 

parser = argparse.ArgumentParser() 
subs = parser.add_subparsers() 

s_parser = subs.add_parser('sname') 
s_parser.add_argument('file_directory1') 
s_parser.add_argument('-o', dest='file_directory2') 

И использовать его как:

prog # -> launch gui 
prog sname file_directory1 
prog sname file_directory1 -o file_directory2 
+0

Спасибо вам обоим, Я думаю, что возьму метод подкоманды. Это явно соответствует моим потребностям. – Plump69

0

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

if args.file_directory2 and not args.file_directory2: 
    parser.error('file_directory is required to use file_directory2') 
Смежные вопросы