为什么有多个解析器?

2024-10-02 04:30:07 发布

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

我正在阅读argparse文档:https://docs.python.org/3.4/library/argparse.html

我通读了ArgumentParser的“parents”文档,其中提到了当多个解析器共享公共arg时使用这个方法。我想知道,什么时候我需要有“几个解析器”在第一位?你知道吗


Tags: 方法文档httpsorg解析器docshtmllibrary
1条回答
网友
1楼 · 发布于 2024-10-02 04:30:07

documentation已经相当简单了:

Rather than repeating the definitions of these arguments, a single parser with all the shared arguments and passed to parents= argument to ArgumentParser can be used

想到一个用例是当您有许多脚本对需要访问用户名和密码的数据库执行不同的操作时。其中一个脚本更改一个表,另一个脚本更改一些权限。。。但是所有这些脚本都需要用户名和密码才能访问数据库,对吗?你知道吗

您可以有一个需要(或解析)用户名和密码的“基本”参数解析器,然后有更多参数的更专门的解析器。例如:

import argparse


def make_basic_parser():
    parser = argparse.ArgumentParser(description='Basic parser (only username/password).',
                                     add_help=False)
    parser.add_argument(' username', type=str, help='Username to access database')
    parser.add_argument(' password', type=str, help='Password to access database')
    return parser


def alter_table_parser():
    parent = make_basic_parser()
    parser = argparse.ArgumentParser(description='Alter a table', parents=[parent])
    parser.add_argument(' table', type=str, help='Table to alter')
    return parser


if __name__ == "__main__":
    parser = alter_table_parser()
    args = parser.parse_args()
    print("Received arguments: %s" % (args))

运行此操作将导致:

$ python ./stack_055_A.py  username foo  password bar  table baz
Received arguments: Namespace(password='bar', table='baz', username='foo')

因此,每次需要用户名和密码时,都可以重用basic\parser。你知道吗

相关问题 更多 >

    热门问题