硬编码命令_要使用自定义参数创建自己的Python命令行?argparse模块了解一下

全文共1699字,预计学习时长11分钟

709b68889cac4aa00a74d40f65ee6727.png

图源:unsplash

相信大多数人都会用这行命令运行python脚本。

$ python main.py

我们能否对该脚本稍作修改比如说定义自己的参数?当然可以!

$ python main.py arg1 arg2

Python中的argparse模块能解决这个问题。argparse 模块可以让人轻松编写用户友好的命令行接口。

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

安装Argparse

和往常一样,要做的第一件事就是安装这个Python模块。

conda install argparse

定义位置参数和可选参数

import argparse                  if __name__ =="__main__":           parser = argparse.ArgumentParser(description="""            This script is going to create an employeeprofile.            """)           parser.add_argument("name", help="Name ofEmployee")           parser.add_argument("title", help="Job Titleof Employee")           parser.add_argument("--address", help="Address ofEmployee")                      args = parser.parse_args()                      NAME= args.name           TITLE= args.title           ADDRESS= args.address                      print("Name :"+NAME)           print("Job Title : "+TITLE)           print("Address : "+ADDRESS)

创建一个ArgumentParse的对象parser,在ArgumentParser中对该脚本做简要描述。用add_argument函数定义位置和可选参数,help用来简单描述这个参数的作用。

位置参数是必须放在合适位置或是遵循一定顺序的参数。

13db7e1482adaaddf3b00ab0adab96a8.png

图源:unsplash

可选参数是输入一个关键字和等号的关键字参数,输入内容是可选的。

· 尝试用help参数-h运行该脚本

$ python employee.py -h              usage: employee.py [-h] [--address ADDRESS] name titleThis script is going tocreate an employee profile.positional arguments:  name               Name of Employee  title              Job Title of Employeeoptionalarguments:  -h, --help         show this help message and exit  --address ADDRESS  Address of Employee

-h和 --help 是argparse中默认定义的参数,显示在脚本中定义的描述,为用户在使用该脚本时提供帮助。

· 输入name 和 title

$ python employee.py AlexManagerName : AlexJob Title : ManagerAddress : None

由于address参数定义为空,在脚本中会把NoneType的值传递给它。在输出结果之前需要将其转换成字符串。

· 试试只输入name

$ python employee.py Alexusage: employee.py [-h] [--address ADDRESS] name titleemployee.py: error: the following arguments are required: title

因为title也是位置参数,所以在脚本中不可省略。

· 这次输入name,title和address。

$ python employee.py AlexManager --address 123 Baker Streetusage: employee.py [-h] [--address ADDRESS] name titleemployee.py: error: unrecognized arguments: Baker Street

因为123 Baker Street中间有空格,该脚本会把Baker Street当作其他参数,这里需要使用双引号。

$ python employee.py AlexManager --address "123 Baker Street"Name : AlexJob Title : ManagerAddress : 123 Baker Street

如果name和title包含多个单词,则要使用双引号。

定义Boolean参数

from distutils.util import strtobool             parser.add_argument("--isFullTime", default=True, type=strtobool, help="Is thisEmployee Full Time? (default: %(default)s)")             FULLTIME= args.isFullTime             ifFULLTIME:                print(NAME+" is a full time employee.")             else:                print(NAME+" is not a full time employee.")

将以上代码加入到之前的脚本中。定义一个可选参数default=True,这样即便不给该参数输入任何内容,其值默认为True。

type=strtobool确保输入内容转变成boolean数据类型。否则,当该脚本在输入中传递时,它将是字符串数据类型。如果需要整数参数,也可以将其定义为type=int。

8fce257c6183abf08937bcb6dd1af60e.png

图源:unsplash

help中的%(default)s)用来检索参数中的默认值。这是为了确保description不是硬编码,能随着默认值灵活更改。

· 再输入name,title和address

$ python employee.py AlexManager --address "123 Baker Street"Name : AlexJob Title : ManagerAddress : 123 Baker StreetAlex is a full time employee.

默认情况下isFullTime为True,因此如果不给isFullTime输入任何参数,则输出结果为Alex是全职员工(Alex is a full time employee)。

· 将默认值改为 False

$ python employee.py AlexManager --address "123 Baker Street" --isFullTime FalseName : AlexJob Title : ManagerAddress : 123 Baker StreetAlex is not a full time employee.

输出结果变成Alex,不是全职员工了。

定义输入参数范围

parser.add_argument("--country",choices=["Singapore", "UnitedStates", "Malaysia"], help="Country/Regionof Employee")                                                                                                                     COUNTRY= args.country                                                   print("Country :"+str(COUNTRY))

可以用choices参数限制可能输入参数的值,这对于防止用户输入无效值很有用。例如,通过choices=[“Singapore”, “UnitedStates”, “Malaysia”]将输入国家/地区的值限制在新加坡,美国和马来西亚当中。

· 可以试试如果输入的国家名字不在choices中会发生什么

$ python employee.py AlexManager --country Japan   usage: employee.py [-h] [--address ADDRESS]                   [--country{Singapore,United States,Malaysia}]                   [--isFullTimeISFULLTIME]                   name titleemployee.py: error: argument --country: invalid choice: 'Japan' (choose from'Singapore', 'United States', 'Malaysia')

用户会收到invalid choice错误警告。调用 --help可以获取choices的使用说明信息。

就是这么简单,如何使用自定义参数创建自己的Python命令行,现在你已经学会啦。

eda6da38c0678208ef86af2894266272.png

留言点赞关注

我们一起分享AI学习与发展的干货

如转载,请后台留言,遵守转载规范

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值