美文网首页
argparse--从‘命令行’解析参数(作为程序输入)

argparse--从‘命令行’解析参数(作为程序输入)

作者: 马尔代夫Maldives | 来源:发表于2023-02-12 20:04 被阅读0次

一、介绍

很多时候,我们的程序是直接通过命令行(linux的terminal,windows的cmd)运行的。例如有一个hello_python.py文件,只有一行代码“print('Hello python!')”,下面是其在windows 命令行上运行的结果


无标题.png

上例很简单,只是输出了一句话。
但是如果程序的执行需要用户输入参数该怎么办?程序如何知道输入的是什么,哪个输入给哪个参数?
argparse正是为了解决上述问题的,它是python用于解析命令行参数和选项的标准模块。

二、argparse使用步骤

可以把argparse的使用简化成四个步骤:
1:import argparse # 导入包
2:parser = argparse.ArgumentParser() # 定义一个参数解析对象,内有一些设置参数,大部分用不着。
3:parser.add_argument() # 加入用户变量(即告诉它要关心哪些变量),内有一些用不着的设置参数。
4:parser.parse_args() # ★★该方法是从命令行解析输入参数的核心,注意,它的执行用户是感受不到的

三、argparse使用经典模板

现有计算矩形面积和周长的程序文件rectangle_cgx.py,程序需要用户输入矩形的长和宽,内部代码如下:

import argparse

def my_parse_args():
    '''命令行参数解析'''

    # 1. 定义命令行解析器对象
    parser = argparse.ArgumentParser(description='Calculate area or perimeter of a rectangle')

    # 2. 添加参数,即告诉解析器,它该关心命令行输入的哪些参数(都由用户指定)
    parser.add_argument('-L','--length', type=int, default=5, help='The length of a rectangle') 
    parser.add_argument('-H','--height', type=int, default=5, help='The height of a rectangle')
    parser.add_argument('-t','--target', type=str, required=True, choices=['area','perimeter'],help='Calculate area or perimeter?')

    # 3. 从命令行中解析出参数(前面add_argument()设置的参数)
    args = parser.parse_args()  # ★★核心代码,正是它完成了从命令行获取参数的关键任务。
    
    return args

# 用户函数,与argparse无关
def calculate_rectan_area(length, height):
    '''计算矩形面积'''
    area = length*height
    return area

# 用户函数,与argparse无关
def calculate_rectan_perimeter(length, height):
    '''计算矩形周长'''
    perimeter = (length+height)*2
    return perimeter

if __name__ == '__main__':
    
    # 调用该函数实现从命令行解析参数,并存储在args中,以备后用。
    args = my_parse_args() # 从命令行中解析参数
    
    # 得到参数后,就可以像普通参数一样使用了
    print(f"length={args.length}")
    print(f"height={args.height}")
    if args.target=='area':   # 计算面积
        area = calculate_rectan_area(args.length,args.height)
        print(f'The area is {area}.')
    elif args.target=='perimeter':  # 计算周长
        perimeter = calculate_rectan_perimeter(args.length,args.height)
        print(f'The perimeter is {perimeter}.')

先来看看其在命令行执行结果:

1)只显示帮助信息
命令行运行:python rectangle.py -h,自动输出该程序的相关信息,这些信息正是我们在add_argument()中加入的信息。注意,-h是argparse自带参数,因此用户自定义时参数时,避免使用-h作为参数简写。

无标题.png

2)正常运行程序
通过命令行,将长5和高8输入到程序,并利用程序计算了面积。

无标题.png

四、其他

有一个在argparse上的加强版
https://github.com/swansonk14/typed-argument-parser

相关文章

网友评论

      本文标题:argparse--从‘命令行’解析参数(作为程序输入)

      本文链接:https://www.haomeiwen.com/subject/vkalkdtx.html