Python argparse模块使用方法解析


Posted in Python onFebruary 20, 2020

这篇文章主要介绍了Python argparse模块使用方法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

1. 说明

  • argparse 模块是python 用于解析命令行参数和选项的标准模块。
  • 程序定义它需要的参数,然后 argparse 模块将弄清如何从 sys.argv 解析出那些参数。
  • argparse 模块还会自动生成帮助和使用手册,并在用户给程序传入无效参数时报出错误信息。

2. 使用流程

使用argparse 模块配置命令行参数时,需要以下几步:

import argparse

创建 ArgumentParser() 对象

调用 add_argument() 方法添加参数

使用 parse_args() 解析添加的参数, 返回一个命名空间

参数解析完后,进行后续业务逻辑的处理

示例:

import argparse
import json

args_list = ["keywords", "keywords_from_file", "prefix_keywords", "suffix_keywords",
    "limit", "format", "color", "color_type", "usage_rights", "size",
    "exact_size", "aspect_ratio", "type", "time", "time_range", "delay", "url", "single_image",
    "output_directory", "image_directory", "no_directory", "proxy", "similar_images", "specific_site",
    "print_urls", "print_size", "print_paths", "metadata", "extract_metadata", "socket_timeout",
    "thumbnail", "thumbnail_only", "language", "prefix", "chromedriver", "related_images", "safe_search", "no_numbering",
    "offset", "no_download","save_source","silent_mode","ignore_urls"]

def user_input():
 # 创建 ArgumentParser() 对象
 config = argparse.ArgumentParser()
 # 调用 add_argument() 方法添加参数
 config.add_argument('-cf', '--config_file', help='config file name', default='', type=str, required=False)
 config_file_check = config.parse_known_args()
 object_check = vars(config_file_check[0])

 if object_check['config_file'] != '':
  records = []
  json_file = json.load(open(config_file_check[0].config_file))
  for record in range(0,len(json_file['Records'])):
   arguments = {}
   for i in args_list:
    arguments[i] = None
   for key, value in json_file['Records'][record].items():
    arguments[key] = value
   records.append(arguments)
  records_count = len(records)
 else:
  # Taking command line arguments from users
  parser = argparse.ArgumentParser()
  parser.add_argument('-k', '--keywords', help='delimited list input', type=str, required=False)
  parser.add_argument('-kf', '--keywords_from_file', help='extract list of keywords from a text file', type=str, required=False)
  parser.add_argument('-sk', '--suffix_keywords', help='comma separated additional words added after to main keyword', type=str, required=False)
  parser.add_argument('-pk', '--prefix_keywords', help='comma separated additional words added before main keyword', type=str, required=False)
  parser.add_argument('-l', '--limit', help='delimited list input', type=str, required=False)
  parser.add_argument('-f', '--format', help='download images with specific format', type=str, required=False,
       choices=['jpg', 'gif', 'png', 'bmp', 'svg', 'webp', 'ico'])
  parser.add_argument('-u', '--url', help='search with google image URL', type=str, required=False)
  parser.add_argument('-x', '--single_image', help='downloading a single image from URL', type=str, required=False)
  parser.add_argument('-o', '--output_directory', help='download images in a specific main directory', type=str, required=False)
  parser.add_argument('-i', '--image_directory', help='download images in a specific sub-directory', type=str, required=False)
  parser.add_argument('-n', '--no_directory', default=False, help='download images in the main directory but no sub-directory', action="store_true")
  parser.add_argument('-d', '--delay', help='delay in seconds to wait between downloading two images', type=int, required=False)
  parser.add_argument('-co', '--color', help='filter on color', type=str, required=False,
       choices=['red', 'orange', 'yellow', 'green', 'teal', 'blue', 'purple', 'pink', 'white', 'gray', 'black', 'brown'])
  parser.add_argument('-ct', '--color_type', help='filter on color', type=str, required=False,
       choices=['full-color', 'black-and-white', 'transparent'])
  parser.add_argument('-r', '--usage_rights', help='usage rights', type=str, required=False,
       choices=['labeled-for-reuse-with-modifications','labeled-for-reuse','labeled-for-noncommercial-reuse-with-modification','labeled-for-nocommercial-reuse'])
  parser.add_argument('-s', '--size', help='image size', type=str, required=False,
       choices=['large','medium','icon','>400*300','>640*480','>800*600','>1024*768','>2MP','>4MP','>6MP','>8MP','>10MP','>12MP','>15MP','>20MP','>40MP','>70MP'])
  parser.add_argument('-es', '--exact_size', help='exact image resolution "WIDTH,HEIGHT"', type=str, required=False)
  parser.add_argument('-t', '--type', help='image type', type=str, required=False,
       choices=['face','photo','clipart','line-drawing','animated'])
  parser.add_argument('-w', '--time', help='image age', type=str, required=False,
       choices=['past-24-hours','past-7-days','past-month','past-year'])
  parser.add_argument('-wr', '--time_range', help='time range for the age of the image. should be in the format {"time_min":"MM/DD/YYYY","time_max":"MM/DD/YYYY"}', type=str, required=False)
  parser.add_argument('-a', '--aspect_ratio', help='comma separated additional words added to keywords', type=str, required=False,
       choices=['tall', 'square', 'wide', 'panoramic'])
  parser.add_argument('-si', '--similar_images', help='downloads images very similar to the image URL you provide', type=str, required=False)
  parser.add_argument('-ss', '--specific_site', help='downloads images that are indexed from a specific website', type=str, required=False)
  parser.add_argument('-p', '--print_urls', default=False, help="Print the URLs of the images", action="store_true")
  parser.add_argument('-ps', '--print_size', default=False, help="Print the size of the images on disk", action="store_true")
  parser.add_argument('-pp', '--print_paths', default=False, help="Prints the list of absolute paths of the images",action="store_true")
  parser.add_argument('-m', '--metadata', default=False, help="Print the metadata of the image", action="store_true")
  parser.add_argument('-e', '--extract_metadata', default=False, help="Dumps all the logs into a text file", action="store_true")
  parser.add_argument('-st', '--socket_timeout', default=False, help="Connection timeout waiting for the image to download", type=float)
  parser.add_argument('-th', '--thumbnail', default=False, help="Downloads image thumbnail along with the actual image", action="store_true")
  parser.add_argument('-tho', '--thumbnail_only', default=False, help="Downloads only thumbnail without downloading actual images", action="store_true")
  parser.add_argument('-la', '--language', default=False, help="Defines the language filter. The search results are authomatically returned in that language", type=str, required=False,
       choices=['Arabic','Chinese (Simplified)','Chinese (Traditional)','Czech','Danish','Dutch','English','Estonian','Finnish','French','German','Greek','Hebrew','Hungarian','Icelandic','Italian','Japanese','Korean','Latvian','Lithuanian','Norwegian','Portuguese','Polish','Romanian','Russian','Spanish','Swedish','Turkish'])
  parser.add_argument('-pr', '--prefix', default=False, help="A word that you would want to prefix in front of each image name", type=str, required=False)
  parser.add_argument('-px', '--proxy', help='specify a proxy address and port', type=str, required=False)
  parser.add_argument('-cd', '--chromedriver', help='specify the path to chromedriver executable in your local machine', type=str, required=False)
  parser.add_argument('-ri', '--related_images', default=False, help="Downloads images that are similar to the keyword provided", action="store_true")
  parser.add_argument('-sa', '--safe_search', default=False, help="Turns on the safe search filter while searching for images", action="store_true")
  parser.add_argument('-nn', '--no_numbering', default=False, help="Allows you to exclude the default numbering of images", action="store_true")
  parser.add_argument('-of', '--offset', help="Where to start in the fetched links", type=str, required=False)
  parser.add_argument('-nd', '--no_download', default=False, help="Prints the URLs of the images and/or thumbnails without downloading them", action="store_true")
  parser.add_argument('-iu', '--ignore_urls', default=False, help="delimited list input of image urls/keywords to ignore", type=str)
  parser.add_argument('-sil', '--silent_mode', default=False, help="Remains silent. Does not print notification messages on the terminal", action="store_true")
  parser.add_argument('-is', '--save_source', help="creates a text file containing a list of downloaded images along with source page url", type=str, required=False)
  # 使用 parse_args() 解析添加的参数
  # 默认的 args 的结果:
  # Namespace(aspect_ratio=None, chromedriver=None, color=None, color_type=None, delay=None, exact_size=None, extract_metadata=False, format=None, ignore_urls=False, image_directory=None, keywords=None, keywords_from_file=None, language=False, limit=None, metadata=False, no_directory=False, no_download=False, no_numbering=False, offset=None, output_directory=None, prefix=False, prefix_keywords=None, print_paths=False, print_size=False, print_urls=False, proxy=None, related_images=False, safe_search=False, save_source=None, silent_mode=False, similar_images=None, single_image=None, size=None, socket_timeout=False, specific_site=None, suffix_keywords=None, thumbnail=False, thumbnail_only=False, time=None, time_range=None, type=None, url=None, usage_rights=None)
  args = parser.parse_args() # 返回一个命名空间
  arguments = vars(args) # 返回 args 的属性和属性值的字典
  # arguments 的结构:
  # {'image_directory': None, 'print_urls': False, 'usage_rights': None, 'color': None, 'socket_timeout': False, 'time_range': None, 'chromedriver': None, 'prefix': False, 'extract_metadata': False, 'keywords': None, 'no_numbering': False, 'size': None, 'keywords_from_file': None, 'print_paths': False, 'no_download': False, 'delay': None, 'similar_images': None, 'specific_site': None, 'thumbnail_only': False, 'type': None, 'thumbnail': False, 'metadata': False, 'related_images': False, 'format': None, 'silent_mode': False, 'print_size': False, 'color_type': None, 'exact_size': None, 'no_directory': False, 'suffix_keywords': None, 'single_image': None, 'offset': None, 'output_directory': None, 'language': False, 'url': None, 'prefix_keywords': None, 'save_source': None, 'ignore_urls': False, 'safe_search': False, 'limit': None, 'time': None, 'aspect_ratio': None, 'proxy': None}
  records = []
  records.append(arguments)
 return records

3. 参数说明

add_argument() 函数每个参数解释如下:

  • name or flags - 选项字符串的名字或者列表,例如 foo 或者 -f, --foo。
  • action - 命令行遇到参数时的动作,默认值是 store。
  • store_const,表示赋值为const;
  • append,将遇到的值存储成列表,也就是如果参数重复则会保存多个值;
  • append_const,将参数规范中定义的一个值保存到一个列表;
  • count,存储遇到的次数;此外,也可以继承 argparse.Action 自定义参数解析;
  • nargs - 应该读取的命令行参数个数,可以是具体的数字,或者是?号,当不指定值时对于 Positional argument 使用 default,对于 Optional argument 使用 - - const;或者是 * 号,表示 0 或多个参数;或者是 + 号表示 1 或多个参数。
  • const - action 和 nargs 所需要的常量值。
  • default - 不指定参数时的默认值。
  • type - 命令行参数应该被转换成的类型。
  • choices - 参数可允许的值的一个容器。
  • required - 可选参数是否可以省略 (仅针对可选参数)。
  • help - 参数的帮助信息,当指定为 argparse.SUPPRESS 时表示不显示该参数的帮助信息.
  • metavar - 在 usage 说明中的参数名称,对于必选参数默认就是参数名称,对于可选参数默认是全大写的参数名称.
  • dest - 解析后的参数名称,默认情况下,对于可选参数选取最长的名称,中划线转换为下划线.

4. 位置参数 设置

以上 描述的是 可选参数的使用,下面描述位置参数的设置,设置了位置参数后,调用脚本时必须要传入对应的值

import argparse
 
parser = argparse.ArgumentParser()
parser.add_argument('a', type=int, help='display an integer param')
args = parser.parse_args()
 
print(args.a)

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python处理圆角图片、圆形图片的例子
Apr 25 Python
Python使用matplotlib绘制动画的方法
May 20 Python
详解Python中heapq模块的用法
Jun 28 Python
python3.4用循环往mysql5.7中写数据并输出的实现方法
Jun 20 Python
使用python编写监听端
Apr 12 Python
Python使用matplotlib绘制三维图形示例
Aug 25 Python
Python实现的读取/更改/写入xml文件操作示例
Aug 30 Python
解决nohup执行python程序log文件写入不及时的问题
Jan 14 Python
Python Pandas实现数据分组求平均值并填充nan的示例
Jul 04 Python
python对矩阵进行转置的2种处理方法
Jul 17 Python
基于python实现上传文件到OSS代码实例
May 09 Python
Python 下载Bing壁纸的示例
Sep 29 Python
浅谈pytorch torch.backends.cudnn设置作用
Feb 20 #Python
Python sqlite3查询操作过程解析
Feb 20 #Python
python利用datetime模块计算程序运行时间问题
Feb 20 #Python
pytorch数据预处理错误的解决
Feb 20 #Python
Python异常继承关系和自定义异常实现代码实例
Feb 20 #Python
Python安装与卸载流程详细步骤(图解)
Feb 20 #Python
PyCharm 专业版安装图文教程
Feb 20 #Python
You might like
如何在PHP中使用Oracle数据库(3)
2006/10/09 PHP
如何用php获取程序执行的时间
2013/06/09 PHP
PHP错误WARNING: SESSION_START() [FUNCTION.SESSION-START]解决方法
2014/05/04 PHP
自动检查并替换文本框内的字符
2006/06/30 Javascript
JQuery中each()的使用方法说明
2010/08/19 Javascript
JavaScript中的View-Model使用介绍
2011/08/11 Javascript
基于Jquery+Ajax+Json实现分页显示附效果图
2014/07/30 Javascript
JavaScript中判断页面关闭、页面刷新的实现代码
2014/08/27 Javascript
遍历json获得数据的几种方法小结
2017/01/21 Javascript
angular2系列之路由转场动画的示例代码
2017/11/09 Javascript
jQuery模拟html下拉多选框的原生实现方法示例
2019/05/30 jQuery
[01:11:10]2014 DOTA2华西杯精英邀请赛 5 24 iG VS VG加赛
2014/05/26 DOTA
python判断给定的字符串是否是有效日期的方法
2015/05/13 Python
Python中matplotlib中文乱码解决办法
2017/05/12 Python
django项目搭建与Session使用详解
2018/10/10 Python
一篇文章弄懂Python中的可迭代对象、迭代器和生成器
2019/08/12 Python
python异常处理之try finally不报错的原因
2020/05/18 Python
Pycharm打开已有项目配置python环境的方法
2020/07/03 Python
python操作微信自动发消息的实现(微信聊天机器人)
2020/07/14 Python
如何用 Python 制作一个迷宫游戏
2021/02/25 Python
Talbots官网:美国成熟女装品牌
2019/11/15 全球购物
音乐教学随笔感言
2014/02/19 职场文书
投资合作协议书
2014/04/17 职场文书
宿舍标语大全
2014/06/19 职场文书
关于读书的演讲稿300字
2014/08/27 职场文书
客户答谢会活动方案
2014/08/31 职场文书
办理房产证委托书
2014/09/18 职场文书
党的群众路线教育实践活动查摆问题自查报告
2014/10/10 职场文书
个人整改措施落实情况汇报
2014/10/29 职场文书
先进党支部申报材料
2014/12/24 职场文书
外贸采购员岗位职责
2015/04/03 职场文书
2015年学校政教处工作总结
2015/05/26 职场文书
党员转正介绍人意见
2015/06/03 职场文书
个人工作总结怎么写?
2019/04/09 职场文书
Python合并pdf文件的工具
2021/07/01 Python
Flask使用SQLAlchemy实现持久化数据
2021/07/16 Python