带有依赖项的 python argparse
我正在编写一个脚本,其中有两个互斥的参数,以及一个仅对其中一个参数有意义的选项。如果您使用没有意义的参数调用它,我会尝试将 argparse 设置为失败。
需要明确的是:
-m -f
有意义
-s
有意义
-s -f
应该抛出错误,
没有参数也可以。
我的代码是:
parser = argparse.ArgumentParser(description='Lookup servers by ip address from host file')
parser.add_argument('host', nargs=1,
help="ip address to lookup")
main_group = parser.add_mutually_exclusive_group()
mysql_group = main_group.add_argument_group()
main_group.add_argument("-s", "--ssh", dest='ssh', action='store_true',
default=False,
help='Connect to this machine via ssh, instead of printing hostname')
mysql_group.add_argument("-m", "--mysql", dest='mysql', action='store_true',
default=False,
help='Start a mysql tunnel to the host, instead of printing hostname')
mysql_group.add_argument("-f", "--firefox", dest='firefox', action='store_true',
default=False,
help='Start a firefox session to the remotemyadmin instance')
哪个不起作用,因为它吐出的
usage: whichboom [-h] [-s] [-m] [-f] host
不是我期望的:
usage: whichboom [-h] [-s | [-h] [-s]] host
或类似的东西。
whichboom -s -f -m 116
也不会抛出任何错误。
I'm writing a script which has 2 arguments which are mutually exclusive, and an option that only makes sense with one of those arguments. I'm trying to set up argparse to fail if you call it with the argument that makes no sense.
To be clear:
-m -f
makes sense
-s
makes sense
-s -f
should throw errors
no arguments are fine.
The code I have is:
parser = argparse.ArgumentParser(description='Lookup servers by ip address from host file')
parser.add_argument('host', nargs=1,
help="ip address to lookup")
main_group = parser.add_mutually_exclusive_group()
mysql_group = main_group.add_argument_group()
main_group.add_argument("-s", "--ssh", dest='ssh', action='store_true',
default=False,
help='Connect to this machine via ssh, instead of printing hostname')
mysql_group.add_argument("-m", "--mysql", dest='mysql', action='store_true',
default=False,
help='Start a mysql tunnel to the host, instead of printing hostname')
mysql_group.add_argument("-f", "--firefox", dest='firefox', action='store_true',
default=False,
help='Start a firefox session to the remotemyadmin instance')
Which doesn't work, as it spits out
usage: whichboom [-h] [-s] [-m] [-f] host
rather than what I'd expect:
usage: whichboom [-h] [-s | [-h] [-s]] host
or somesuch.
whichboom -s -f -m 116
also doesn't throw any errors.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
你只是把争论组搞混了。在您的代码中,您仅将一个选项分配给互斥组。我认为你想要的是:
你可以跳过整个互斥组的事情并添加如下内容:
You just have the argument groups mixed up. In your code, you only assign one option to the mutually exclusive group. I think what you want is:
You could just skip the whole mutually exclusive group thing and add something like this:
创建解析器时添加
usage
参数:来源:http ://docs.python.org/dev/library/argparse.html#usage
Add the
usage
argument when creating the parser:Source: http://docs.python.org/dev/library/argparse.html#usage