Python 3 学习笔记

人生苦短,我用 Python。

👉文章列表
Python 3 学习笔记 ⏬ 数字 数字的进制转换 集合 set 路径处理 sys.path 模块 使用 SimpleHttpServer 快速构建静态文件服务 包管理器 pip 的使用 virtualenv 的使用 CRC32 BeautifulSoup 使用指南 使用 BeautifulSoup 去除 HTML 中的注释 PyMySQL 使用指南 json 处理 yaml 处理 使用 getopt 库解析命令行参数 使用 argparse 库解析命令行参数 Jinja2 模板引擎

Python 3 : 使用 getopt 库解析命令行参数



命令行参数会存放在 sys.argv 中, sys.argv 是一个 list。getopt 是一个内置的参数解析库。

sys.argv 示例

import sys

print(type(sys.argv))
print(sys.argv)

文件名是test.py,执行示例:

▶ python3 test.py
<class 'list'>
['test.py']

▶ python3 test.py hello
<class 'list'>
['test.py', 'hello']

▶ python3 test.py -num 12
<class 'list'>
['test.py', '-num', '12']

sys.argv 只是简单的存储了命令行参数, 我们在使用时,可能会有下面的需求:

  • 无参数时展示帮助
  • 必须有2个参数
  • 获取-num 之后的参数
  • 等等

这就需要解析命令行参数。我们可以自己写解析逻辑,也可以用一些参数解析库帮助我们快速开发解析逻辑。

getopt 的使用

示例1

文件名: test_getopt.py,代码:

import sys
import getopt

opts, args = getopt.getopt(sys.argv[1:], '-h', ['help'])

print(opts)
print(args)

执行示例:

▶ python3 test_getopt.py help
[]
['help']

▶ python3 test_getopt.py --help
[('--help', '')]
[]

getopt.getopt参数解释:

  • 参数1:被解析的命令行参数列表,注意sys.argv[0] 是Python文件名,不属于参数列表。
  • 参数2:短参数名集合
  • 参数3:可选,每个短参数名对应的长参数名。一般用列表类型。

返回值有两个: * 返回值1:解析的参数键值对 * 返回值2:未解析的参数键值对

示例2

文件名: test_getopt.py,代码:

import sys
import getopt

opts, args = getopt.getopt(sys.argv[1:], '-h-f:', ['help', 'filename='])

print(opts)
print(args)

-f: 表示 -f 后是参数值,对应的filename=,表示要写成 --filename=xxx

执行示例:

▶ python3 test_getopt.py -h -f tmp.txt
[('-h', ''), ('-f', 'tmp.txt')]
[]

▶ python3 test_getopt.py -h --filename=tmp.txt
[('-h', ''), ('--filename', 'tmp.txt')]
[]

▶ python3 test_getopt.py -h --filename=tmp.txt abc
[('-h', ''), ('--filename', 'tmp.txt')]
['abc']

示例3

基于示例2,我们加一些具体的处理逻辑:

import sys
import getopt

opts, args = getopt.getopt(sys.argv[1:], '-h-f:', ['help', 'filename='])

for opt_name,opt_value in opts:
    if opt_name in ('-h','--help'):
        print('帮助文档')
        exit()
    elif opt_name in ('-f', '--filename'):
        print('开始处理文件', opt_value)
        # 一些处理逻辑
        exit()
    else:
        print('什么都不做')

使用示例:

▶ python3 test_getopt.py -h
帮助文档

▶ python3 test_getopt.py -h --filename=tmp.txt
帮助文档

▶ python3 test_getopt.py --filename=tmp.txt
开始处理文件 tmp.txt

( 本文完 )

文章目录