sys.argv变量
- sys.argv类型List[str],就是普通的列表,sys.argv[0]运行的脚本
- 因为每个参数都是str,不能直接解析参数(例如–time=0)
- 每个参数用空白字符分割,参数包含空白符的用单引号或双引号分开
import sys
if __name__ == "__main__":
print(sys.argv)
argparse模块
- 基于optparse(不推荐使用)
- 帮助信息,附加信息更全面,推荐使用
- 使用ArgumentParser类解析参数,支持-p 80或-p=80格式,即用=号或空白符分割参数名和参数值
- 构造ArgumentParser对象后调用add_argument定义命令行参数,–完整参数名,-简写参数名,default默认值
- 调用parse_args返回Namespace类对象,用属性访问(.)获取参数
from argparse import ArgumentParser
from multiprocessing import cpu_count
def parse_option():
parser = ArgumentParser(prog='argparse test',
usage='info',
description='get option from cmdline',
prefix_chars='-')
parser.add_argument('-n',
'--num',
type=int,
dest='number',
default=cpu_count())
parser.add_argument('-f', '--fun', default='ping')
parser.add_argument('-m', '--mode', default='proc')
parser.add_argument('-p', '--port')
parser.add_argument('-w', '--save')
return parser.parse_args()
if __name__ == "__main__":
options = parse_option()
print(options)
print(options.number, options.fun)
getopt模块
- 使用形式接近c语言getopt函数
- 使用getopt.getopt(args=args, shortopts, longopts=[])初始化
- args要解析的参数数组,通常为sys.argv[1:]
- shortopts短参数(-t),有冒号(:)选项必须有值(-t 100或-t100都可,-t=100解析为=100),没有冒号选项不能有值
- longopts长参数(–timeout),有等号(=)选项必须有值(–t 100或–t100及–t=100都解析100),没有等号选项不能有值
- 返回一个两元素元组,第一个元素(option, value)格式的列表,第二元素是没匹配的内容列表
- 遇到未匹配的立即返回,shortopts必须在longopts前,没有匹配的args
- 返回值没有属性访问(.)或字典访问([])方法,后期处理没有argparse方便
import sys
import getopt
def parse_option(args):
option, argv = getopt.getopt(
args=args,
shortopts='n:t:f',
longopts=['num', 'timeout', 'fun', 'mode', 'port=', 'save'])
print(option)
print(argv)
if __name__ == "__main__":
parse_option(sys.argv[1:])
其他模块
- click
- fire
- 个人认为这两个库设计上,不是单纯为了解析命令行参数目的