在那里已经创建了一个语法分析器来添加子参数?

2024-09-26 17:48:20 发布

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

通常,要在argparse中添加子parser,必须执行以下操作:

parser = ArgumentParser()
subparsers = parser.add_subparser()
subparser = subparsers.add_parser()

我遇到的问题是我试图添加另一个命令行脚本,它有自己的解析器,作为主脚本的子命令。有没有一个简单的方法可以做到这一点?在


编辑:为了澄清,我有一个文件script.py如下所示:

^{pr2}$

所以我可以这样做:

python script.py --foo --bar

我试图编写一个模块app.py,这是一个命令行界面,有几个子命令,所以我可以运行类似于:

python app.py script --foo --bar

与其将所有的initparser()逻辑复制粘贴到app.py上,我希望能够直接使用从initparser()创建的解析器作为子解析器。这可能吗?在


Tags: 命令行py命令脚本addappparser解析器
3条回答

您可能想看看shlex模块,因为在我看来,您试图破解ArgumentParser来做一些它实际上并不打算做的事情。在

话虽如此,如果没有实例来说明你正在试图解析的是什么,很难找到一个好的答案。在

您可以使用parents参数

p=argparse.ArgumentParser()
s=p.add_subparsers()
ss=s.add_parser('script',parents=[initparser()],add_help=False)
p.parse_args('script  foo sst'.split())

ss是一个解析器,它共享为initparser定义的所有参数。在ss或{}上需要{},因此-h没有定义两次。在

我认为您的问题可以通过argparse的声明性包装器来解决。{我写的那个叫做。它有助于将命令的定义(包括所有与参数相关的内容)与组装(包括子parser)和分派分离开来。在

相关问题 更多 >

    热门问题