前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >如何使用Python的命令行参数——创建自己的Python命令行参数脚本的简单指南

如何使用Python的命令行参数——创建自己的Python命令行参数脚本的简单指南

作者头像
人工智能小咖
修改2020-05-09 10:19:14
2.4K0
修改2020-05-09 10:19:14
举报
文章被收录于专栏:人工智能小咖人工智能小咖

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

代码语言:javascript
复制
$ python main.py

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

代码语言:javascript
复制
$ python main.py arg1 arg2

我们将使用Python 中的argparse模块来配置命令行参数和选项。argparse 模块可以让人轻松编写用户友好的命令行接口。程序定义它需要的参数,然后argparse 将弄清如何从 sys.argv 解析出那些参数。argparse 模块还会自动生成帮助和使用手册,并在用户给程序传入无效参数时报出错误信息。

开始使用Argparse吧

安装Argparse

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

代码语言:javascript
复制
conda install argparse

定义位置参数和可选参数

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

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

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

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

代码语言:javascript
复制
$ python employee.py -h 
 usage: employee.py [-h] [--address ADDRESS] name titleThis script is going to create an employee profile.positional arguments:
  name Name of Employee
  title Job Title of Employeeoptional arguments:
  -h, --help show this help message and exit
  --address ADDRESS Address of Employee

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

  • 输入name 和 title
代码语言:javascript
复制
$ python employee.py Alex Manager
 Name : Alex
 Job Title : Manager
 Address : None

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

  • 试试只输入name
代码语言:javascript
复制
$ python employee.py Alex 
 usage: employee.py [-h] [--address ADDRESS] name title
 employee.py: error: the following arguments are required: title

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

  • 这次输入name, title和address。
代码语言:javascript
复制
$ python employee.py Alex Manager --address 123 Baker Street
 usage: employee.py [-h] [--address ADDRESS] name title
 employee.py: error: unrecognized arguments: Baker Street

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

代码语言:javascript
复制
$ python employee.py Alex Manager --address "123 Baker Street"
 Name : Alex
 Job Title : Manager
 Address : 123 Baker Street

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

定义Boolean参数

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

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

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

  • 再输入name, title和address
代码语言:javascript
复制
$ python employee.py Alex Manager --address "123 Baker Street" 
 Name : Alex
 Job Title : Manager
 Address : 123 Baker Street
 Alex is a full time employee.

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

  • 将默认值改为 False
代码语言:javascript
复制
$ python employee.py Alex Manager --address "123 Baker Street" --isFullTime False
 Name : Alex
 Job Title : Manager
 Address : 123 Baker Street
 Alex is not a full time employee.

天哪!输出结果变成Alex现在不是全职员工(Alex is not a full time employee.)。

定义输入参数范围

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

  • 可以试试如果输入的国家名字不在choices中会发生什么
代码语言:javascript
复制
$ python employee.py Alex Manager --country Japan 
 usage: employee.py [-h] [--address ADDRESS]
  [--country {Singapore,United States,Malaysia}]
  [--isFullTime ISFULLTIME]
  name title
 employee.py: error: argument --country: invalid choice: 'Japan' (choose from 'Singapore', 'United States', 'Malaysia')

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

现在你已经学会了如何使用自定义参数创建自己的Python命令行。希望这篇文章对你有帮助。如果发现文章中有内容错误或书写错误的地方,可以留言告知。

可以在笔者的Github上查看完整的脚本代码。加油!

本文系外文翻译,前往查看

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

本文系外文翻译前往查看

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 开始使用Argparse吧
    • 安装Argparse
      • 定义位置参数和可选参数
        • 定义Boolean参数
          • 定义输入参数范围
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档