argparse 能够根据程序中的定义从 sys.argv 中解析出这些参数,并自动生成帮助和使用信息。

ArgumentParse 解析器

使用 argparse 解析命令行参数时,首先需要创建一个解析器:

  1. import argparse
  2. parser = argparse.ArgumentParser()
  • description 比较常用的参数,程序的描述信息

    使用 add_argument 方法为应用程序添加参数选项

  1. def add_argument(
  2. self,
  3. *name_or_flags: Text, # 参数的名字
  4. action: Union[Text, Type[Action]] = ..., # 遇到参数时的动作
  5. nargs: Union[int, Text] = ..., # 参数的个数,可以是具体的数字,也可以是 + 或者 *,* 0 个或多个,+ 1个或多个
  6. const: Any = ..., # 需要的常量值
  7. default: Any = ..., # 不指定参数时的默认值
  8. type: Union[Callable[[Text], _T], Callable[[str], _T], FileType] = ..., # 参数的类型
  9. choices: Iterable[_T] = ..., # 参数允许的值
  10. required: bool = ..., # 可选参数是否可以忽略
  11. help: Optional[Text] = ..., # 参数的帮助信息
  12. metavar: Optional[Union[Text, Tuple[Text, ...]]] = ..., # 在 useage 说明中的参数名称
  13. dest: Optional[Text] = ..., # 解析后的参数名称
  14. version: Text = ...,
  15. **kwargs: Any,
  16. )
  • parse_args 方法进行解析参数,该方法返回一个 Namespace 对象。获取对象以后,参数值通过属性的方式进行访问。 ```python import argparse

def _argparse(): parser = argparse.ArgumentParser(description=”This is description”) parser.add_argument(‘—host’, action=’store’, dest=’server’, default=”localhost”, help=’connect to host’) parser.add_argument(‘-t’, action=’store_true’, default=False, dest=’boolean_switch’, help=’Set a switch to true’) return parser.parse_args()

def main(): parser = _argparse() print(parser) print(‘host =’, parser.server) print(‘boolean_switch =’, parser.boolean_switch)

if name == ‘main‘: main()

  1. ```bash
  2. ❯ python test_argparse.py
  3. Namespace(server='localhost', boolean_switch=False)
  4. host = localhost
  5. boolean_switch = False
  6. ❯ python test_argparse.py --host=127.0.0.1 -t
  7. Namespace(server='127.0.0.1', boolean_switch=True)
  8. host = 127.0.0.1
  9. boolean_switch = True

argparse 会根据我们的选项定义自动生成帮助信息

  1. python test_argparse.py --help
  2. usage: test_argparse.py [-h] [--host SERVER] [-t]
  3. This is description
  4. optional arguments:
  5. -h, --help show this help message and exit
  6. --host SERVER connect to host
  7. -t Set a switch to true

模仿 MySQL 客户端的命令行参数

  1. import argparse
  2. def _argparse():
  3. parser = argparse.ArgumentParser(description='A Python_MySQL client')
  4. parser.add_argument('--host', action='store', dest='host',
  5. required=True, help='connect to host')
  6. parser.add_argument('-u', '--user', action='store',
  7. dest='user', required=True, help='user for login')
  8. parser.add_argument('-p', '--password', action='store', dest='password',
  9. required=True, help='password to use when conneting to server')
  10. parser.add_argument('-P', '--port', action='store', dest='port', default=3306,
  11. type=int, help='port number to use for connection or 3306 for default')
  12. parser.add_argument('-v', '--version', action='version',
  13. version='%(prog)s 0.1')
  14. return parser.parse_args()
  15. def main():
  16. parser = _argparse()
  17. conn_args = dict(host=parser.host, user=parser.user,
  18. password=parser.password, port=parser.port, version=parser.version)
  19. print(conn_args)
  20. if __name__ == '__main__':
  21. main()
  1. python mock_mysql_client.py --help
  2. usage: mock_mysql_client.py [-h] --host HOST -u USER -p PASSWORD [-P PORT] [-v]
  3. A Python_MySQL client
  4. optional arguments:
  5. -h, --help show this help message and exit
  6. --host HOST connect to host
  7. -u USER, --user USER user for login
  8. -p PASSWORD, --password PASSWORD
  9. password to use when conneting to server
  10. -P PORT, --port PORT port number to use for connection or 3306 for default
  11. -v, --version show program's version number and exit