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 client使用http post 到server端的代码
Feb 10 Python
Python列表append和+的区别浅析
Feb 02 Python
Python使用sftp实现上传和下载功能(实例代码)
Mar 14 Python
pycharm中连接mysql数据库的步骤详解
May 02 Python
火车票抢票python代码公开揭秘!
Mar 08 Python
基于python实现名片管理系统
Nov 30 Python
Python实现的栈、队列、文件目录遍历操作示例
May 06 Python
Python定时任务工具之APScheduler使用方式
Jul 24 Python
Python3 xml.etree.ElementTree支持的XPath语法详解
Mar 06 Python
在Python IDLE 下调用anaconda中的库教程
Mar 09 Python
python中线程和进程有何区别
Jun 17 Python
python中print格式化输出的问题
Apr 16 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
如何删除多级目录
2006/10/09 PHP
php基于websocket搭建简易聊天室实践
2016/10/24 PHP
Javascript Function对象扩展之延时执行函数
2010/07/06 Javascript
提升你网站水平的jQuery插件集合推荐
2011/04/19 Javascript
javascript模拟实现C# String.format函数功能代码
2013/11/25 Javascript
jquery做的一个简单的屏幕锁定提示框
2014/03/26 Javascript
extjs 时间范围选择自动判断的实现代码
2014/06/24 Javascript
jquery实现的蓝色二级导航条效果代码
2015/08/24 Javascript
JavaScript 消息框效果【实现代码】
2016/04/27 Javascript
js利用appendChild对标签进行排序的实现方法
2016/10/16 Javascript
webpack构建vue项目的详细教程(配置篇)
2017/07/17 Javascript
Javascript中 toFixed四舍六入方法
2017/08/21 Javascript
Vue项目添加动态浏览器头部title的方法
2018/07/11 Javascript
解决vue.js this.$router.push无效的问题
2018/09/03 Javascript
小程序server请求微信服务器超时的解决方法
2019/05/21 Javascript
vue-cli3+typescript新建一个项目的思路分析
2019/08/06 Javascript
vue 使用鼠标滚动加载数据的例子
2019/10/31 Javascript
详解JS函数防抖
2020/06/05 Javascript
JavaScript实现弹出窗口效果
2020/12/09 Javascript
[30:51]DOTA2上海特级锦标赛主赛事日 - 3 胜者组第二轮#1Liquid VS MVP.Phx第一局
2016/03/04 DOTA
Python中操作文件之write()方法的使用教程
2015/05/25 Python
Python用UUID库生成唯一ID的方法示例
2016/12/15 Python
在centos7中分布式部署pyspider
2017/05/03 Python
Python+Socket实现基于TCP协议的客户与服务端中文自动回复聊天功能示例
2017/08/31 Python
Python基础之字典常见操作经典实例详解
2020/02/26 Python
在python中修改.properties文件的操作
2020/04/08 Python
台湾东南旅游社网站:东南旅游
2019/02/11 全球购物
美国尼曼百货官网:Neiman Marcus
2019/09/05 全球购物
便利店的创业计划书
2014/01/15 职场文书
高中地理教学反思
2014/01/29 职场文书
最美乡村医生事迹材料
2014/06/02 职场文书
2014年精神文明工作总结
2014/12/23 职场文书
如何使用vue3打造一个物料库
2021/05/08 Vue.js
一次Mysql update sql不当引起的生产故障记录
2022/04/01 MySQL
Oracle中日期的使用方法实例
2022/07/07 Oracle
WIN10使用IIS部署ftp服务器详细教程
2022/08/05 Servers