gpt4 book ai didi

python - 如何表明至少需要一个参数?

转载 作者:行者123 更新时间:2023-11-30 23:09:30 25 4
gpt4 key购买 nike

我的脚本使用 ArgParse 接受 --full--last--check。如果没有提供选项,则仅显示帮助消息。但在该消息中,参数显示为可选。

用法:script.py [-h] [--full] [--last] [--check log_file]

如果我使用关键字required,那么脚本将始终需要该参数,这是不正确的。

用法:script.py [-h] --full --last --check log_file

那么,我怎样才能显示类似的内容:

用法:script.py [-h] (--full |-​​-last |--check log_file)

表示帮助是可选的,但至少其中一个参数是必需的。

最佳答案

关于自定义用法的问题:

解析器构造函数采用一个usage参数。立即生效的是设置一个属性:

parser = argparse.ArgumentParser( ... usage=custom_usage...)
print(parser.usage)
# should show None or the custom_usage string

作为普通的 Python 对象属性,您可以在创建解析器后更改它。

usage_str = parser.format_usage()

format_usage 方法要求解析器创建将在帮助(和错误消息)中显示的用法。如果 parser.usage 值为 None,它会根据参数对其进行格式化。如果是字符串,则按原样使用(我认为它填充诸如 %(prog)s 之类的值)。

因此您可以从头开始编写用法字符串。或者您可以设置解析器,获取当前使用字符串,然后对其进行编辑以满足您的需求。编辑很可能是您在开发期间在 IDE 中测试解析器时要做的事情。但这可以即时完成。

一个粗略的例子:

In [441]: parser=argparse.ArgumentParser()
In [442]: g=parser.add_mutually_exclusive_group()
In [443]: g.add_argument('--foo')
In [444]: g.add_argument('--bar')

In [445]: ustr = parser.format_usage()
# 'usage: ipython3 [-h] [--foo FOO | --bar BAR]\n'

In [450]: parser.usage = ustr.replace('[','(').replace(']',')')
In [451]: parser.format_usage()
# 'usage: usage: ipython3 (-h) (--foo FOO | --bar BAR)\n'

我已将 [] 替换为 ()(甚至在 -h :( )上。

目前测试 args 属性的逻辑组合是最好的选择。在 parse_args 函数内部,解析器维护它所看到的参数列表(实际设置)。它用于测试必需的参数和mutual_exclusive_arguments,但它在该代码之外不可用。

对于 store_true (或 false)参数,只需检查它们的真值。对于其他人,我喜欢测试默认的 None。如果您使用其他默认值,请进行相应的测试。 None 的一个好处是用户无法为您提供该值。

也许测试参数的最通用方法是计算非 None 的属性数量:

In [461]: args=argparse.Namespace(one=None, tow=2, three=None)
In [462]: ll = ['one','tow','three']
In [463]: sum([getattr(args,l,None) is not None for l in ll])
Out[463]: 1

0 表示没有找到; >0 至少存在一个; ==len(ll) 全部找到; >1 违反了相互排他性; '==1' 表示要求互斥。

关于python - 如何表明至少需要一个参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31183146/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com