如何使 python argparse 互斥组参数没有前缀?
Python2.7 argparse 仅接受互斥组中的可选参数(带前缀):
parser = argparse.ArgumentParser(prog='mydaemon')
action = parser.add_mutually_exclusive_group(required=True)
action.add_argument('--start', action='store_true', help='Starts %(prog)s daemon')
action.add_argument('--stop', action='store_true', help='Stops %(prog)s daemon')
action.add_argument('--restart', action='store_true', help='Restarts %(prog)s daemon')
$ mydaemon -h
usage: mydaemon [-h] (--start | --stop | --restart)
optional arguments:
-h, --help show this help message and exit
--start Starts mydaemon daemon
--stop Stops mydaemon daemon
--restart Restarts mydaemon daemon
有没有办法使 argparse 参数的行为类似于传统的 unix 守护进程控制:
(start | stop | restart) and not (--start | --stop | --restart) ?
Python2.7 argparse only accepts optional arguments (prefixed) in mutually exclusive groups:
parser = argparse.ArgumentParser(prog='mydaemon')
action = parser.add_mutually_exclusive_group(required=True)
action.add_argument('--start', action='store_true', help='Starts %(prog)s daemon')
action.add_argument('--stop', action='store_true', help='Stops %(prog)s daemon')
action.add_argument('--restart', action='store_true', help='Restarts %(prog)s daemon')
$ mydaemon -h
usage: mydaemon [-h] (--start | --stop | --restart)
optional arguments:
-h, --help show this help message and exit
--start Starts mydaemon daemon
--stop Stops mydaemon daemon
--restart Restarts mydaemon daemon
Is there a way to make argparse arguments behaves like traditional unix daemon control:
(start | stop | restart) and not (--start | --stop | --restart) ?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
使用
ArgumentParser.add_mutually_exclusive_group()
:输出:
版本2
Use
ArgumentParser.add_mutually_exclusive_group()
:output:
version2
对于 argparse 中的所有功能和选项,我认为您永远不会得到看起来像您想要的那样的“罐装”用法字符串。
也就是说,自从您最初发表文章以来,您是否看过子解析器?
这是一个准系统的实现:
使用
-h
选项运行它会产生:这种方法的好处之一是能够为每个子解析器使用
set_defaults
来连接一个子解析器。函数直接传递给参数。我还为stop
和restart
添加了“优雅”选项:显示
stop
的“帮助”消息:“优雅”停止:
For all the abilities and options in
argparse
I don't think you'll ever get a "canned" usage string that looks like what you want.That said, have you looked at sub-parsers since your original post?
Here's a barebones implementation:
Running this with the
-h
option yields:One of the benefits of this approach is being able to use
set_defaults
for each sub-parser to hook up a function directly to the argument. I've also added a "graceful" option forstop
andrestart
:Showing the "help" message for
stop
:Stopping "gracefully":
听起来您想要一个位置参数而不是互斥的选项。您可以使用“选择”来限制可能可接受的选项。
这会产生如下所示的用法行:
It sounds like you want a positional argument instead of mutually exclusive options. You can use 'choices' to restrict the possible acceptable options.
This produces a usage line that looks like this:
基于 Adam 的答案...如果您想指定默认值,您可以随时执行以下操作,以便他们可以有效地将其留空。
这将打印:
Building on Adam's answer... if you wanted to specify a default you could always do the following so they can effectively leave it blank.
which will print: