我们是否应该使用选项来获取非可选信息,但这样做是为了让信息看起来更直观?

2024-04-25 01:12:15 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试编写一个python程序,该程序将在cli中提供一些github功能,如创建问题、创建repo、创建PRs等

我想出了类似的办法 github create issue --title <title> --description <description> --user <user> --repo <repo>

为此,我使用了argparse

import argparse
parser = argparse.parser()
parser.add_argument('create', 
                    options=['issue', 'repo', 'pull')
                    action='store')
parser.add_argument('--title', action="store", type=str)
parser.add_argument('--description', action="store", type=str)
parser.add_argument('--user', action="store")
parser.add_argument('--repo')

parser.parse_args('create issue --title title --description desc --user user --repo repo')

我使用选项--title--descriptions以关键字形式获取信息

虽然选项是可选的,但根据我的分析风格:

  • 如果createissue,则需要--title--description--user--repo

解析命令github create issue --title title --description desc --user user --repo repo的正确方法是什么


Tags: store程序githubaddparsertitletypecreate
1条回答
网友
1楼 · 发布于 2024-04-25 01:12:15

首先是一些调整:

parser.add_argument(' title', action="store", type=str)

可以简化为

parser.add_argument(' title')

因为此操作和类型是默认值。您可以使用 repo执行此操作

args = parser.parse_args()

从命令行读取并将值放入args命名空间中

args = parser.parse_args(['issue  title title  description desc  user user  repo repo'].split())

可以使用模拟的字符串列表来测试此解析器

注意,我删除了create

parser.add_argument('create', choices=['issue', 'repo', 'pull'))

定义将放入argspositional作为args.create。它接受的字符串是choices(而不是options)。另一种方法是使用 create;在这种情况下,它的行为与其他参数类似,只是接受的值有一个限制

如果您想为特定值要求一些参数,则需要在解析后进行测试,例如

if args.create in ['issue']:
    if args.title is None or args.user is None:
       parser.error('title and user required with issue')

这几乎是最近的How can I make Python argparse to have dependency的复制品,它也作为复制品关闭

另一种方法是使用subparsers。但是您可以阅读文档和前面的[argparse]问题中的内容

尝试这些想法,然后回答一个新问题

您必须编写一个自定义的usage和/或help段落来向用户描述约束

相关问题 更多 >