IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> 【Python】命令行参数的解析技巧 -> 正文阅读

[Python知识库]【Python】命令行参数的解析技巧

常用三种解析方法:

方式一:解析系统sys.argv[]参数列表

def parse_sys_argv():
????????print({'argv[0]':sys.argv[0],'argv[1]':sys.argv[1],'argv':sys.argv})

# 执行命令:python argv.py param1 param2
# 打印结果:{'argv[0]': 'argv.py', 'argv[1]': 'param1', 'argv': ['argv.py', 'param1', 'param2']}

方式二:通过getopt解析sys.argv[1:]

def parse_sys_argv_by_getopt():
?? ??? ?try:
?? ??? ??? ??? ?options, args = getopt.getopt(sys.argv[1:],'p:i:v:m:t:')
?? ??? ?except getopt.GetoptError as e:
?? ??? ??? ??? ?print({"getopt except":e.msg, 'option':e.opt})
?? ??? ??? ??? ?sys.exit(1)
?? ??? ?print({'options':options,'args':args})

# 输入正常支持选项时:
# 执行命令:python argv.py? -p path -i input -v 3_0 -m master -t time
# 打印结果:{'options': [('-p', 'path'), ('-i', 'input'), ('-v', '3_0'), ('-m', 'master'), ('-t', 'time')], 'args': []}
# 输入不支持选项时:抛异常
# 执行命令:python argv.py? -p path -i input -x y
# 打印结果:{'getopt except': 'option -x not recognized', 'option': 'x'}?

方式三:通过argparse解析参数

# 步骤1:创建ArgumentParser()对象
# 步骤2:调用add_argument()方法添加选项参数
# 步骤3:调用parse_agrs()解析添加的选项参数

def parse_argparse():
?? ??? ?description = "This is argparse test"
?? ??? ?parser = argparse.ArgumentParser(description=description)
?? ??? ?parser.add_argument('positional',default=r'定位参数',help='必须输入的参数')
?? ??? ?default_path = os.path.dirname(__file__)
?? ??? ?parser.add_argument('-p','--path',dest='filePath', default=default_path,help='fiel path')
?? ??? ?parser.add_argument('-a','--paramA',default=2,type=int, help='input int')
?? ??? ?#default:参数默认值
?? ??? ?#dest:解析后的属性名,当没有指定dest时,解析后的属性名是--param中param,这是可选参数
?? ??? ?#当没有'-'和'--'表示必选参数,-是--的简写
?? ??? ?args = parser.parse_args()
?? ??? ?print({'args.positional':args.positional})
?? ??? ?print({'args.filePath':args.filePath})
?? ??? ?print({'args.paramA':args.paramA})
?? ??? ?print({'args':args})

# 执行命令:python argv.py -p /home -a 255 当不输入定位参数选项时
# usage: argv.py [-h] [-p FILEPATH] [-a PARAMA] positional
# argv.py: error: the following arguments are required: positional
# 执行命令:python argv.py -p /home -a 255 "positional param"?? ?
# {'args.positional': 'positional param'}
# {'args.filePath': '/home'}
# {'args.paramA': 255}
# {'args': Namespace(filePath='/home', paramA=255, positional='positional param')}

?应用技巧:通过main.py来控制流程

创建argvparse.py,内容如下:

# encoding=utf-8
import sys

# 方式一:解析系统sys.argv[]参数列表
def parse_sys_argv():
????????if len(sys.argv) < 2: return
????????print({'argv[0]':sys.argv[0],'argv[1]':sys.argv[1],'argv':sys.argv})

if __name__ == '__main__':
????????parse_sys_argv()

创建getoptparse.py,内容如下:

# encoding=utf-8
import getopt
import sys

# 方式二:通过getopt解析sys.argv[1:]
def parse_sys_argv_by_getopt():
?? ??? ?try:
?? ??? ??? ??? ?options, args = getopt.getopt(sys.argv[1:],'p:i:v:m:t:')
?? ??? ?except getopt.GetoptError as e:
?? ??? ??? ??? ?print({"getopt except":e.msg, 'option':e.opt})
?? ??? ??? ??? ?sys.exit(1)
?? ??? ?print({'options':options,'args':args})

if __name__ == '__main__':
?? ?parse_sys_argv_by_getopt()

创建argparserparse.py,内容如下:

# encoding=utf-8
import sys,os
import argparse

def parse_argparse():
?? ??? ?description = "This is argparse test"
?? ??? ?parser = argparse.ArgumentParser(description=description)
?? ??? ?parser.add_argument('positional',default=r'定位参数',help='必须输入的参数')
?? ??? ?default_path = os.path.dirname(__file__)
?? ??? ?parser.add_argument('-p','--path',dest='filePath', default=default_path,help='fiel path')
?? ??? ?parser.add_argument('-a','--paramA',default=2,type=int, help='input int')
?? ??? ?#default:参数默认值
?? ??? ?#dest:解析后的属性名,当没有指定dest时,解析后的属性名是--param中param,这是可选参数
?? ??? ?#当没有'-'和'--'表示必选参数,-是--的简写
?? ??? ?args = parser.parse_args()
?? ??? ?print({'args.positional':args.positional})
?? ??? ?print({'args.filePath':args.filePath})
?? ??? ?print({'args.paramA':args.paramA})
?? ??? ?print({'args':args})

if __name__ == '__main__':
?? ?parse_argparse()

创建main.py,内容如下:

#encoding='utf-8'

import os

print("方式一:解析系统sys.argv[]参数列表:")
os.system("python argvparse.py param1 param2")
print('***'*30)

print("方式二:通过getopt解析sys.argv[1:]:")
print("输入正常支持选项时:")
os.system("python getoptparse.py -p path -i input -v 3_0 -m master -t time")
print('***'*30)
print("输入不支持选项时:抛异常:")
os.system("python getoptparse.py -p path -i input -x y")
print('***'*30)

print("方式三:通过argparse解析参数:")
print("当不输入定位参数选项时:")
os.system("python argparserparse.py -p /home -a 255")
print('***'*30)
print("当输入定位参数选项时:")
os.system('python argparserparse.py -p /home -a 255 "positional param"')
print('***'*30)

执行结果如下:

?

ArgumentParser和add_argument参数概述:

详见:argparse --- 命令行选项、参数和子命令解析器 — Python 3.11.0a7 文档

argparse.ArgumentParser(
?? ??? ?prog=None,
?? ??? ?usage=None,
?? ??? ?description=None,
?? ??? ?epilog=None,
?? ??? ?parents=[],
?? ??? ?formatter_class=HelpFormatter,
?? ??? ?prefix_chars='-',
?? ??? ?fromfile_prefix_chars=None,
?? ??? ?argument_default=None,
?? ??? ?conflict_handler='error',
?? ??? ?add_help=True,
?? ??? ?allow_abbrev=True)

创建一个新的 ArgumentParser对象。所有的参数都应当作为关键字参数传入。每个参数在下面都有它更详细的描述:
【prog】:程序的名称(默认值:sys.argv[0])
【usage】:描述程序用途的字符串(默认值:从添加到解析器的参数生成)
【description】:在参数帮助文档之前显示的文本(默认值:无)
【epilog】:在参数帮助文档之后显示的文本(默认值:无)
【parents】:一个 ArgumentParser 对象的列表,它们的参数也应包含在内
【formatter_class】:用于自定义帮助文档输出格式的类
【prefix_chars】:可选参数的前缀字符集合(默认值: '-')
【fromfile_prefix_chars】:当需要从文件中读取其他参数时,用于标识文件名的前缀字符集合(默认值: None)
【argument_default】:参数的全局默认值(默认值: None)
【conflict_handler】:解决冲突选项的策略(通常是不必要的)
【add_help】:为解析器添加一个 -h/--help 选项(默认值: True)
【allow_abbrev】:如果缩写是无歧义的,则允许缩写长选项 (默认值:True),该参数还会禁用短旗标分组,例如 -vv 表示为 -v-v。

ArgumentParser.add_argument(name or flags...[, action][, nargs][, const][, default][, type][, choices][, required][, help][, metavar][, dest])
【name or flags】:一个命名或者一个选项字符串的列表,例如 foo 或 -f, --foo。
【action】:当参数在命令行中出现时使用的动作基本类型。
【nargs】:命令行参数应当消耗的数目。
【const】:被一些 action 和 nargs 选择所需求的常数。
【default】:当参数未在命令行中出现并且也不存在于命名空间对象时所产生的值。
【type】:命令行参数应当被转换成的类型。
【choices】:可用的参数的容器。
【required】:此命令行选项是否可省略(仅选项可用)。
【help】:一个此选项作用的简单描述。
【metavar】:在使用方法消息中使用的参数值示例。
【dest】:被添加到 parse_args() 所返回对象上的属性名。

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2022-04-26 11:38:17  更:2022-04-26 11:41:15 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 15:18:16-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码