我正在尝试编写一个python程序,它将在cli中提供一些github功能,比如创建问题,创建回购,创建PR等等。
我想出了类似的东西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
以关键字形式获取信息。
虽然选项是可选的,但根据我的解析风格:
create
为issue
,则--title
,--description
,--user
,--repo
是必需的。解析命令github create issue --title title --description desc --user user --repo repo
的正确方法是什么?
答案 0 :(得分:0)
首先进行一些调整:
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'))
定义positional
将args
作为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
段落来描述对用户的约束。