argparse有不同的模式

时间:2015-05-26 11:24:26

标签: python argparse

我使用argparse有些困难。 我有一个我想要使用的GUI应用程序:

  1. GUI.exe =>打开GUI应用程序
  2. GUI.exe -s file_directory1 =>不打开它就玩GUIX.exe
  3. GUI.exe -s file_directory1 -o file_directory2 =>与2相同。
  4. 不允许这样做:GUI.exe -o file_directory

    我知道如何做1和2而不是3

    是否有人已经这样做过或者能给我一些线索?

    提前感谢您的帮助。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

如果你的问题是如何设法获得两个参数,你可以在解析你的参数时提出一个条件:

if args.file_directory2 and not args.file_directory2:
    parser.error('file_directory is required to use file_directory2')