不同模式的argparse
argparse with different modes
我在使用 argparse 时遇到了一些困难。
我有一个我想像这样使用的 GUI 应用程序:
- GUI.exe => 打开 GUI 应用程序
- GUI.exe -s file_directory1 => 在不打开的情况下播放 GUIX.exe
- GUI.exe -s file_directory1 -o file_directory2 => 与 2.
相同
不允许这样做: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
我在使用 argparse 时遇到了一些困难。 我有一个我想像这样使用的 GUI 应用程序:
- GUI.exe => 打开 GUI 应用程序
- GUI.exe -s file_directory1 => 在不打开的情况下播放 GUIX.exe
- GUI.exe -s file_directory1 -o file_directory2 => 与 2. 相同
不允许这样做: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