作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
通常,要在 argparse
中添加一个子解析器,您必须这样做:
parser = ArgumentParser()
subparsers = parser.add_subparser()
subparser = subparsers.add_parser()
我遇到的问题是我试图添加另一个命令行脚本,它有自己的解析器,作为我的主脚本的子命令。有没有简单的方法可以做到这一点?
编辑:为了澄清,我有一个看起来像这样的文件 script.py
:
def initparser():
parser = argparse.ArgumentParser()
parser.add_argument('--foo')
parser.add_argument('--bar')
return parser
def func(args):
#args is a Namespace, this function does stuff with it
if __name__ == '__main__':
initparser().parse_args()
所以我可以这样运行:
python script.py --foo --bar
我正在尝试编写一个模块app.py
,它是一个带有多个子命令的命令行界面,因此我可以运行如下内容:
python app.py script --foo --bar
与其将所有 initparser()
逻辑复制并粘贴到 app.py
,我希望能够直接使用我创建的解析器initparser() 作为子解析器。这可能吗?
最佳答案
你可以使用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
或 initparser
需要 add_help=False
,因此 -h
没有定义两次。
关于python - 有没有办法在 argparse 中添加一个已经创建的解析器作为子解析器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14988397/
我是一名优秀的程序员,十分优秀!