不同模式的argparse

argparse with different modes

我在使用 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

有没有人已经这样做了或者可以给我一些线索?

预先感谢您的帮助。

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

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

仅使用 add_argument 并且不进行人工检查是不可能达到您想要的效果的。正如 maggick 所说,您始终可以在解析命令行后检查用户是否使用了正确的选项,方法是手动执行:

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

但是我相信你的 -s 选项有点像 subcommand. If this is the case it would be better to use 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