python argparse 分隔命令的 2 个选项

python argparse separate 2 options of comamnds

我已经阅读了文档,但仍然无法弄清楚如何实现以下行为: 1.likes。在tinder中给用户指定的点赞数(以后可能会包含更多选项,比如“性别”、“频率”、“年龄”等) 2.给tinder上给定数量的人写给定的文字(以后可能还会有更多的选择)。

有我的代码:

parser = argparse.ArgumentParser(description='Badoo liker', epilog='Enjoy the program! :)')
# I also tried "add_mutually_exclusive_group" instead of "add_argument_group"
chat_args = parser.add_argument_group(title='chat_args')
chat_args.add_argument('-c', '--chat', help='chat help')
chat_args.add_argument('-t', '--text', help='text help')
chat_args.add_argument('-n', '--number', help='n help')

like_args = parser.add_argument_group(title='like_args')
like_args.add_argument('-l', '--like', help='like help')
like_args.add_argument('-n', '--number', help='n help')

args = parser.parse_args()

Usage:
$script.py chat --text 'Hello world' -n 20 # Var 1
$script.py liking -n 20 # Var 2

显然,我正在等待聊天或喜欢的争论

P.S。由于 -n 常见参数,我收到一个错误,但即使评论它也不会像预期的那样工作

很难说出你理解了什么,什么对你有用。

这更像是评论,但足够长,我会让它回答。

那些 usage 行是您调用此脚本时使用的样本吗?你遇到了什么错误?

您是否尝试过scipt.py -h查看帮助?

我没有看到 positional 参数可以接受像“聊天”或“喜欢”这样的字符串。我怀疑您想使用子命令机制,但要让基本的 argparse 正常工作。

我经常建议包括一个 print(args) 行来清楚地了解解析器做了什么。虽然显然你不会看到 argparse 引发错误。

推迟使用群组,直到你掌握了基础知识。 argument_group 只是在帮助显示中对参数进行分组。 mutually_exclusive_group 是一种解析工具,如果您尝试在组中使用多个项目,它会发出提示。

最终,我做到了,接下来的代码(显然)满足了我的问题

# "metavar=''" -just hide redundant double --key KEY word
parser = argparse.ArgumentParser(description='Badoo liker', epilog='Enjoy the program! :)')
subparsers = parser.add_subparsers(help='')

parser_like = subparsers.add_parser('like', help='like help')
parser_like.add_argument('-n', '--number', metavar='', help='Set count of likes', default=49)
parser_like.add_argument('-f', '--frequency', metavar='', help='Set chance to like/dislike', default=70)

parser_chat = subparsers.add_parser('chat', help='chat help')
parser_chat.add_argument('-n', '--number', metavar='', help='number help', required=True)
parser_chat.add_argument('-t', '--text', metavar='', help='text help', required=True)

args = parser.parse_args()