【发布时间】:2016-11-08 13:45:44
【问题描述】:
我正在寻找具有以下结构的参数解析器:
options [ 'backup', 'consistency_check', 'backup_and_consistency_check']
--database [ required ]
--action [ required choice from list options ]
--where_to_backup_to [ only required if --action is 'backup' ]
--what_file_to_consistency_check [ only required if --action is 'consistency_check']
--clean [ optional ]
--force [ optional if --clean is also in arguments ]
如何使用 ArgumentParser 模块实现可选参数,具体取决于作为另一个命令行参数所做的选择。
如果例如命令行参数是,我希望使 ArgParse 失败
--d database_name --a backup --what_file_to_consistency_check /var/tmp/file.bak
这是我到目前为止所得到的(我知道它很少,但如果我从一开始就没有正确地使用子解析器,我不想在完全错误的方向上走)
actions = ['backup', 'consistency_check', 'backup_and_consistency_check']
def create_parser():
parser = ArgumentParser(description='Parser for Backup / Consistency Check')
parser.add_argument('--database', '-d', dest='db', help='Database name', choices=get_active_database_list())
parser.add_argument('--action', '-a', dest='action', help='Action option', choices=actions)
# --where_to_backup_to [ only if action = backup ]
# --what_file_to_consistency_check [ only if action = cc ]
parser.add_argument('--clean', '-c', dest='clean', help='Clean')
# --force [ only available if --clean is also in arguments ]
return parser
【问题讨论】:
-
为每个动作提供自己的子解析器。顺便说一句,按照惯例,您会将操作作为位置参数。
-
你能举个例子吗?它甚至不必是实际代码 - 只是一个描述?我可以将子解析器添加到特定参数而不是整个解析器吗?
-
以动作为条件是子解析器的适用于,因此文档中的示例都适用。
-
将再看一遍文档 - 这是令人难以置信的东西!
-
我试图让标题更能描述实际的问题——“Python Argument Parsing”可以表示任何数量的东西,问题标题的部分目标是足够描述其他有相同问题的人实际上可以确定给定问题(希望有答案)是否真的正在解决他们遇到的相同问题。
标签: python arguments command-line-arguments argparse