使用特定标志时如何允许省略所需的参数?
Posted
技术标签:
【中文标题】使用特定标志时如何允许省略所需的参数?【英文标题】:How to allow required arguments to be omitted when a specific flag is used? 【发布时间】:2021-07-09 15:23:21 【问题描述】:我的代码如下。
__version__ = 'v10'
class MyHelpFormatter(argparse.ArgumentDefaultsHelpFormatter):
def _get_help_string(self, action):
return action.help
def main():
parser = argparse.ArgumentParser(
formatter_class=MyHelpFormatter,
description=__version__
)
parser.print_usage = parser.print_help
parser.add_argument("file", help="path to file/directory")
parser.add_argument(
"-t",
"--type",
type=str,
default=False,
help="file type",
)
parser.add_argument(
"-c",
"--config",
action="store_true",
help="change custom text",
)
parser.add_argument(
"-v",
"--version",
action='version',
version=__version__,
help="thumb-gen version",
)
在我的代码中,它总是需要“文件”参数。没关系。
现在我想在使用“--config”参数调用时调用一个函数。但是当我运行 main.py --config
时,它还需要 'file' 参数。
如何在不输入所需参数的情况下使用“-config”参数?
【问题讨论】:
这能回答你的问题吗? Require either of two arguments using argparse 您的代码从不调用parser.parse_args()
或main()
,而且还有很多看起来与问题无关的东西。请提供minimal reproducible example。如果你想用,我写了一个here in a gist。
@MauriceMeyer 当我使用该解决方案时,“文件”参数需要一个标志。我的代码中不需要“文件”标志。有解决办法吗?
通常最干净的解决方案是使--file
具有良好默认值的可选。这样你就不用关心用户是否提供了值。
类似这样的:group.add_argument('--file', nargs='?')
或默认值。
【参考方案1】:
有两种方法可以解决这个问题。首先,您可以将文件参数设为可选。解析完成后,您的代码会检查 --config
标志是否存在——如果不存在,则检查是否给出了文件参数。如果不是,请退出并显示相应的错误消息。
您也可以使用 两个 解析器。第一个查找--config
并设置一个标志(例如do_config = True
);它不需要文件参数。然后使用第二个解析器,如果 do_config
为 False,则该解析器只需要文件参数。
【讨论】:
以上是关于使用特定标志时如何允许省略所需的参数?的主要内容,如果未能解决你的问题,请参考以下文章