前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python 命令行参数解析库argparse

Python 命令行参数解析库argparse

作者头像
MeteoAI
发布2019-07-24 16:35:59
1.8K0
发布2019-07-24 16:35:59
举报
文章被收录于专栏:MeteoAIMeteoAI

在工作业务中,有些函数的调用要尽量傻瓜,能够让其他人能够方便地调用,毕竟甲方是爸爸。

假设我有一个python程序,姑且叫extract_WRF.py,内部代码如下例子一,脚本中的main主函数功能简化为打印出输入的参数,即:

代码语言:javascript
复制
print(zone,input_source_dir,output_source_dir,features,levels)

参数有zone,input_source_dir,output_source_dir,feature,levels,但是该函数print不能在命令行运行,只能在脚本内部调用,于是我们需要python标准库内的argparse[1]来帮忙。

使用步骤:

1)import argparse 首先导入模块

2)parser = argparse.ArgumentParser() 创建一个解析对象

3)parser.add_argument() 向该对象中添加你要关注的命令行参数和选项

4)parser.parse_args() 进行解析

对于第2步, 通过help parser ,显示其参数有:

代码语言:javascript
复制
- pro	                        --程序名称,默认为 sys.argv[0]
-usage	                      --用法信息,默认从参数自动获取
-description	                -- 描述项目是做什么的
-epilog	                      --紧随着参数描述(argument)的文本
-formatter_class	            --自定义帮助信息的格式
-prefix_chars	                -- 命令行的前缀
- fromfile_prefix_chars	      -- 额外的参数应该读取的文件的前缀字符集(默认:None)
- argument_default	          -- 参数的全局默认值(默认:None)
- conflict_handler	          --解决冲突的可选策略
-add help	                    - 给解析器添加-h/–help 选项(默认: True)

对于第3步,依次增加所需参数,并规定其是否是必须参数、类型、默认值、个数。比如required = True 规定其为必要参数,type=str 定义其为字符串,默认值为‘d02’,帮助信息为’WRF模拟区域d01,d02,d03中的一个‘。

对于 features 参数,我们利用nargs来指定 featuers 参数后面的值有多少个,默认为1,本文例子中定义为*,代表无穷多个,即nargs *来表示如果有该位置参数输入的话,之后所有的输入都将作为该位置参数的值。

例子一:

代码语言:javascript
复制
# 整个脚本名称叫extact_WRF.py
import time import os
import sys  import argparse
def parse_arguments(argv):    
    parser = argparse.ArgumentParser() #   
    # 添加参数名、默认值,类型  
    parser.add_argument('--zone',required = True, type=str, default ='d02', help='one of the 3 WRF model zones: d02,d01 OR d03')    
    parser.add_argument('--input_source_dir', type= str , default='/publi/home/wang/wrf_1/', help='WRF data location')    
    parser.add_argument('--output_source_dir', type=str, default='/public/home/test_read_stns', help='aim dir which save output')                     
    parser.add_argument('--features', nargs = '*', default=['RH','RA','SW','PBLH','UU','VV','TA','PR'], help='wanted feature name')    
    parser.add_argument('--levels', nargs = '*', default=[1000,950,900,850,800,750,650]  , help='wanted Pressure levels ,units:hPa')    
    return parser.parse_args(argv)
def main(args): #接收输入参数#打印输入的参数

    print(args.zone,
        args.input_source_dir,
          args.output_source_dir,
          args.features,
          args.levels)
 if __name__ == "__main__":
    start = time.time()
    main(parse_arguments(sys.argv[1:]))

    end = time.time()
    print('run time: ', end - start)
    print('extract WRF  data success! \n')

在命令行输入python extract_WRF --help ,会打印出各个参数的说明:

代码语言:javascript
复制
usage: extract_WRF.py [-h] [--zone ZONE]
                               [--input_source_dir INPUT_SOURCE_DIR]
                               [--output_source_dir OUTPUT_SOURCE_DIR]
                               [--features [FEATURES [FEATURES ...]]]
                               [--levels [LEVELS [LEVELS ...]]]

optional arguments:
  -h, --help            show this help message and exit
  --zone ZONE           one of the 3 WRF model zones: d02,d01 OR d03
  --input_source_dir INPUT_SOURCE_DIR
                        WRF data location
  --output_source_dir OUTPUT_SOURCE_DIR
                        aim dir which save output
  --features [FEATURES [FEATURES ...]]
                        wanted feature name
  --levels [LEVELS [LEVELS ...]]
                        wanted Pressure levels ,units:hPa

如果不使用默认的参数,在命令行输入python extract_WRF.py --zone 'd03' --features 'UU' 'PBLH'

打印出了所输入的新参数,说明输入参数调用成功。

代码语言:javascript
复制
d03 /public/home/wang/wrf_1/ /public/home/test_read_stns_1day ['UU', 'PBLH'] [1000, 950, 900, 850, 800, 750, 650]
run time:  0.0012843608856201172
extract WRF  data success!

实际上,python 还有其他的命令行解析库,比如Flask 作者写的click,谷歌开源的fire。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-07-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 MeteoAI 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档