2024-10-01 09:27:27 发布
网友
我在脚本中使用python2.7和argparse。我正在执行以下脚本:
python2.7
argparse
python2.7 script.py -a valuefora -b valueforb -c valueforc -d valueford
现在我想要的是
如果给定选项-a,则只应询问-b、-c、-d选项。
-a
-b
-c
-d
除此之外,我还想将这个组-a -b -c -d作为-e的一个或,即([-a -b -c -d] | -e )
-a -b -c -d
-e
([-a -b -c -d] | -e )
请纠正我的错误。
您的最佳选择是测试parse_args之后是否存在各种组合,并使用parser.error发出与argparse兼容的错误消息。写你的线。并确保默认值清楚地表明某个选项是否已被解析。在
parse_args
parser.error
如果您可以将-a和-e选项更改为命令名,如cmda或build,则可以使用子parser。在本例中,您可以定义一个接受-b、-c和-d的command_a子parser,以及另一个不接受-b、-c和-d的command_e子parser。这是关闭的argparse进入“required together”参数组。在
cmda
build
command_a
command_e
mutually exclusive groups可以用[-a -b -c]这样的用法来定义某些东西,但这仅仅意味着-b不能与{}和{}一起出现。但这种机制一点都不新奇。它只是构造一个排除的字典,并在每次解析一个新选项时对其进行检查。如果存在冲突,它将发出错误消息并退出。它不是用来处理复杂的组合的,例如您的(-e | agroup)。在
mutually exclusive groups
[-a -b -c]
(-e | agroup)
自定义操作还可以检查namespace中是否存在非默认值,这与解析后的操作非常类似。但在解析过程中这样做并不简单。这也引起了人们对秩序的质疑。是否要以与-a -c -b相同的方式处理-b -c -a?是-a检查其他人的存在,还是-b检查{}是否已经被解析?谁检查-e的存在或不存在。在
namespace
-a -c -b
-b -c -a
还有许多关于argparse组的其他堆栈问题,包括独占的和包含的,但我认为这些是最基本的问题。在
您的最佳选择是测试
parse_args
之后是否存在各种组合,并使用parser.error
发出与argparse
兼容的错误消息。写你的线。并确保默认值清楚地表明某个选项是否已被解析。在如果您可以将
-a
和-e
选项更改为命令名,如cmda
或build
,则可以使用子parser。在本例中,您可以定义一个接受-b、-c和-d的command_a
子parser,以及另一个不接受-b、-c和-d的command_e
子parser。这是关闭的argparse
进入“required together”参数组。在mutually exclusive groups
可以用[-a -b -c]
这样的用法来定义某些东西,但这仅仅意味着-b
不能与{(-e | agroup)
。在自定义操作还可以检查}是否已经被解析?谁检查
namespace
中是否存在非默认值,这与解析后的操作非常类似。但在解析过程中这样做并不简单。这也引起了人们对秩序的质疑。是否要以与-a -c -b
相同的方式处理-b -c -a
?是-a
检查其他人的存在,还是-b
检查{-e
的存在或不存在。在还有许多关于argparse组的其他堆栈问题,包括独占的和包含的,但我认为这些是最基本的问题。在
相关问题 更多 >
编程相关推荐