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 re正则表达式模块(Regular Expression)
Jul 16 Python
python中dir()与__dict__属性的区别浅析
Dec 10 Python
Python zip函数打包元素实例解析
Dec 11 Python
Python字符串的修改方法实例
Dec 19 Python
Python基于Socket实现简单聊天室
Feb 17 Python
python数据预处理 :数据共线性处理详解
Feb 24 Python
浅析Python __name__ 是什么
Jul 07 Python
详解Python中的编码问题(encoding与decode、str与bytes)
Sep 30 Python
python邮件中附加文字、html、图片、附件实现方法
Jan 04 Python
Python try except finally资源回收的实现
Jan 25 Python
python 批量将中文名转换为拼音
Feb 07 Python
Python中request的基本使用解决乱码问题
Apr 12 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
jq的get传参数在utf-8中乱码问题的解决php版
2008/07/23 PHP
PHP学习笔记之字符串编码的转换和判断
2014/05/22 PHP
php实现模拟登陆方正教务系统抓取课表
2015/05/19 PHP
Laravel网站打开速度优化的方法汇总
2017/07/16 PHP
PHP实现二叉树深度优先遍历(前序、中序、后序)和广度优先遍历(层次)实例详解
2018/04/20 PHP
Array对象方法参考
2006/10/03 Javascript
js 获取子节点函数 (兼容FF与IE)
2010/04/18 Javascript
javascript常用方法、属性集合及NodeList 和 HTMLCollection 的浏览器差异
2010/12/25 Javascript
浅析jQuery中常用的元素查找方法总结
2013/07/04 Javascript
限制textbox或textarea输入字符长度的JS代码
2013/10/16 Javascript
DOM基础教程之事件对象
2015/01/20 Javascript
PHP+jQuery实现随意拖动层并即时保存拖动位置
2015/04/30 Javascript
辨析JavaScript中的Undefined类型与null类型
2016/05/26 Javascript
浅谈 vue 中的 watcher
2017/12/04 Javascript
AngularJS下$http服务Post方法传递json参数的实例
2018/03/29 Javascript
vue中rem的配置的方法示例
2018/08/30 Javascript
javascript json对象小技巧之键名作为变量用法分析
2019/11/11 Javascript
基于脚手架创建Vue项目实现步骤详解
2020/08/03 Javascript
关于vue-cli3打包代码后白屏的解决方案
2020/09/02 Javascript
Windows下Python的Django框架环境部署及应用编写入门
2016/03/10 Python
Python中数组,列表:冒号的灵活用法介绍(np数组,列表倒序)
2018/04/18 Python
pandas中去除指定字符的实例
2018/05/18 Python
对Django中的权限和分组管理实例讲解
2019/08/16 Python
python中如何使用insert函数
2020/01/09 Python
keras获得某一层或者某层权重的输出实例
2020/01/24 Python
Python基于staticmethod装饰器标示静态方法
2020/10/17 Python
PyCharm 解决找不到新打开项目的窗口问题
2021/01/15 Python
浅谈HTML5 defer和async的区别
2016/06/07 HTML / CSS
玩具公司的创业计划书
2013/12/31 职场文书
环境工程专业自荐信范文
2014/03/18 职场文书
员工2014年度工作总结
2014/12/09 职场文书
校园安全主题班会
2015/08/12 职场文书
街道办残联2016年助残日活动总结
2016/04/01 职场文书
关于python中模块和重载的问题
2021/11/02 Python
vue配置型表格基于el-table拓展之table-plus组件
2022/04/12 Vue.js
JS实现简单九宫格抽奖
2022/06/28 Javascript