设为首页 加入收藏

TOP

python中argparse模块的用法(一)
2023-07-25 21:27:40 】 浏览:63
Tags:python argparse

argparse 模块

一个可执行文件或者脚本都可以接收参数。

$ ls -l /etc
/etc 是位置参数

-l 是短选项

如何把这些参数传递给程序呢?
从3.2开始Python提供了功能强大的参数分析的模块argparse。

1.参数分类

参数分为:

  • 位置参数,参数放在那里,就要对应一个参数位置。例如/etc就是对应一个参数位置。
  • 选项参数,必须通过前面是 - 的短选项或者 -- 的长选项,然后后面的才算该选项的参数,当然选项后面也可以没有参数。

上例中,/etc对应的是位置参数,-l是选项参数。

ls -alh src

2.基本解析

先来一段最简单的程序

import argparse
parser = argparse.ArgumentParser() # 获得一个参数解析器
args = parser.parse_args()  # 分析参数

parser.print_help()  # 打印帮助

运行结果

$ python test.py -h
usage: test1.py [-h]
    
optional arguments:

-h, --help show this help message and exit

argparse不仅仅做了参数的定义和解析,还自动帮助生成了帮助信息。尤其是usage,可以看到现在定义的参数是否是自己想要的。

3.解析器的参数

参数名称 说明
prog 程序的名字,缺省使用 sys.argv[0] 的 basename
add_help 自动为解析器增加 -h 和 --help 选项,默认为True
description 为程序功能添加描述
  • parser = argparse.ArgumentParser(prog='ls', add_help=True, description='list directory contents')
$ python test.py --help
usage: ls [-h]
list directory contents
optional arguments:
  -h, --help show this help message and exit

4.位置参数解析

ls 基本功能应该解决目录内容的打印。
打印的时候应该指定目录路径,需要位置参数。

import argparse
 
# 获得一个参数解析器
parser = argparse.ArgumentParser(prog='ls', add_help=True, description='list 
directory contents')
parser.add_argument('path')
                                 
args = parser.parse_args()  # 分析参数
parser.print_help()  # 打印帮助
                                 
# 运行结果,出现了错误,提示需要输入path对应的位置参数
usage: ls [-h] path

ls: error: the following arguments are required: path

程序定义为:

ls [-h] path
-h为帮助选项,可有可无
path为位置参数,必须提供

传参

parse_args(args=None, namespace=None)

args 参数列表,一个可迭代对象。内部会把可迭代对象转换成list。如果为None则使用命令行传入参数,非None则使用args参数的可迭代对象。

import argparse
 
# 获得一个参数解析器
parser = argparse.ArgumentParser(prog='ls', add_help=True, description='list 
directory contents')
parser.add_argument('path') # 位置参数
args = parser.parse_args(('/etc',))  # 分析参数,同时传入可迭代的参数
print(args, args.path) # 打印名词空间中收集的参数
parser.print_help()  # 打印帮助

运行结果

Namespace(path='/etc') /etc
usage: ls [-h] path
                                 
list directory contents
                                 
positional arguments:
  path
                                 
optional arguments:

  -h, --help  show this help message and exit

Namespace(path='/etc')里面的path参数存储在了一个Namespace对象内的属性上,可以通过
Namespace对象属性来访问,例如args.path

非必须位置参数

上面的代码必须输入位置参数,否则会报错。

usage: ls [-h] path

ls: error: the following arguments are required: path

但有时候,ls命令不输入任何路径的话就表示列出当前目录的文件列表。

import argparse
# 获得一个参数解析器
parser = argparse.ArgumentParser(prog='ls', add_help=True, description='list 
directory contents')
parser.add_argument('path', nargs='?', default='.', help="path help") # 位置
参数,可有可无,缺省值,帮助
args = parser.parse_args()  # 分析参数,同时传入可迭代的参数
print(args) # 打印名词空间中收集的参数
parser.print_help()  # 打印帮助
# 运行结果
Namespace(path='.')
usage: ls [-h] [path]
list directory contents
positional arguments:
  path        path help
optional arguments:

  -h, --help  show this help message and exit

可以看出path也变成可选的位置参数,没有提供就使用默认值 .点号 表示当前路径。

help 表示帮助文档中这个参数的描述
nargs 表示这个参数接收结果参数

  • ? 表示可有可无
  • +表示至少一个
  • *可以任意个
  • 数字表示必须是指定数目个

default 表示如果不提供该参数,就使用这个值。一般和?、*配合,因为它们都可以不提供位置参数,不提供就用缺省值

5.选项参数

-l的实现

parser.add_argument('-l') 就增加了选项参数,参数定义为
ls [-h][-l L] [path]

和我们要的形式有一点出入,我们期望的是 [-l] ,怎么解决?

nargs能够解决吗?

parser.add_argument('-l', nargs='?')
ls [-h][-l [L]] [path]

-l还不是可选参数。

那么,直接把nargs=0,意思就是让这个选项接收0个参数,如下

parser.add_argument('-l', nargs=0)

结果,抛出异常

raise ValueError('nargs for store actions must be > 0; if you '
ValueError: nar
首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇深度学习为什么如此受欢迎?都有.. 下一篇用Python找出了删除自己微信的所..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目