Python命令行参数argv和argparse该如何使用


Posted in Python onFebruary 08, 2021

概述

运行python脚本时通过命令行方式传入运行参数通常有以下两种自建方式:

  • sys.argv - 简洁
  • argparse - 丰富,可自定义

下面详细说一下具体时使用

argv

# test_argv.py

import sys

args = sys.argv
print(f'args = {args}')

>>> output
➜ git:(master) python3 test_argv.py     
args = ['test_argv.py']
➜ git:(master) ✗ python3 test_argv.py 1 2 3
args = ['test_argv.py', '1', '2', '3']
➜ git:(master) ✗ python3 test_argv.py 1 2 3 'hello world !'
args = ['test_argv.py', '1', '2', '3', 'hello world !']

从上面可以看出,通过argv方法获取的结果:

  • 返回为list
  • 第一个参数为脚本本身
  • 如参数中间带空格,用引号即可

argparse

argparse模块的功能较为丰富,其核心是通过add_argument方法自定义入参的:标志、格式、类型和范围等特性,常用如下:

  • *name_or_flag - 定义入参名或flag,如'-n', '--number'
  • type - 指定入参类型
  • choices - 指定入参范围
  • default - 指定入参默认值
  • required - 指定该餐素是否不要,布尔类型
  • help - 参数概述

更多请参考: argparse

实例

test_argv.py

import argparse

# 初始化一个parser对象
parser = argparse.ArgumentParser(description='test module of argparse')

# 指定-n/--number的参数
# 类型为int
# help为简短地说明
parser.add_argument(
  '-n', '--number', type=int,
  help='args of number'
)

# 指定-o/--output参数
# 并限制类型为:['txt', 'csv', 'doc']
parser.add_argument(
  '-o', '--output', type=str,
  choices=['txt', 'csv', 'doc'],
  help='output method'
)

# 指定-d/--default参数
# 并限制类型为:['txt', 'csv', 'doc']
parser.add_argument(
  '-d', '--default', type=int,
  choices=[_ for _ in range(1, 10)],
  default=5,
  help='default'
)

# 指定位置参数foo
parser.add_argument('foo')

args = parser.parse_args()
print(f'args = {args}')

# 获取指定参数
print(
  f'number = {args.number}, type = {type(args.number)}\n'
  f'output = {args.output}, type = {type(args.output)}\n'
  f'default = {args.default}, type = {type(args.default)}\n'
  f'foo = {args.foo}, type = {type(args.foo)}'
)

output

# -h - 打印help
➜ git:(master) ✗ python3 test_argv.py -h
usage: test_argv.py [-h] [-n NUMBER] [-o {txt,csv,doc}]
          [-d {1,2,3,4,5,6,7,8,9}]
          foo

test module of argparse

positional arguments:
 foo

optional arguments:
 -h, --help      show this help message and exit
 -n NUMBER, --number NUMBER
            args of number
 -o {txt,csv,doc}, --output {txt,csv,doc}
            output method
 -d {1,2,3,4,5,6,7,8,9}, --default {1,2,3,4,5,6,7,8,9}
            default
# 不带参数运行,结果为None
➜ git:(master) ✗ python3 test_argv.py  
args = Namespace(number=None, output=None)
number = None
output = None

# 带参数运行
➜ git:(master) ✗ python3 test_argv.py -n 33 --output txt
args = Namespace(number=33, output='txt')
number = 33, type = <class 'int'>
output = txt, type = <class 'str'>

# 参数格式错误
➜ git:(master) ✗ python3 test_argv.py -n str     
usage: test_argv.py [-h] [-n NUMBER] [-o {txt,csv,doc}]
test_argv.py: error: argument -n/--number: invalid int value: 'str'
➜ git:(master) ✗ python3 test_argv.py -o excel    
usage: test_argv.py [-h] [-n NUMBER] [-o {txt,csv,doc}]
test_argv.py: error: argument -o/--output: invalid choice: 'excel' (choose from 'txt', 'csv', 'doc')

# 默认参数 
➜ git:(master) ✗ python3 test_argv.py   
args = Namespace(default=5, number=None, output=None)
number = None, type = <class 'NoneType'>
output = None, type = <class 'NoneType'>
output = 5, type = <class 'int'>

以上就是Python命令行参数argv和argparse该如何使用的详细内容,更多关于Python命令行参数argv和argparse的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
Python计算程序运行时间的方法
Dec 13 Python
简析Python的闭包和装饰器
Feb 26 Python
Python设计实现的计算器功能完整实例
Aug 18 Python
python使用锁访问共享变量实例解析
Feb 08 Python
Python3 中把txt数据文件读入到矩阵中的方法
Apr 27 Python
Linux下python制作名片示例
Jul 20 Python
python将秒数转化为时间格式的实例
Sep 16 Python
python实现ip地址查询经纬度定位详解
Aug 30 Python
python做接口测试的必要性
Nov 20 Python
Pytorch的mean和std调查实例
Jan 02 Python
Python爬虫之Selenium设置元素等待的方法
Dec 04 Python
Python OpenCV 图像平移的实现示例
Jun 04 Python
python 实现Requests发送带cookies的请求
Feb 08 #Python
PyCharm2020.3.2安装超详细教程
Feb 08 #Python
python 30行代码实现蚂蚁森林自动偷能量
Feb 08 #Python
如何用Python编写一个电子考勤系统
Feb 08 #Python
python编程的核心知识点总结
Feb 08 #Python
python上下文管理器异常问题解决方法
Feb 07 #Python
python中@contextmanager实例用法
Feb 07 #Python
You might like
PHP中time(),date(),mktime()区别介绍
2013/09/28 PHP
PHP简单选择排序算法实例
2015/01/26 PHP
Smarty模板变量调节器用法分析
2016/05/23 PHP
Redis使用Eval多个键值自增的操作实例
2016/11/04 PHP
深入浅出讲解:php的socket通信原理
2016/12/03 PHP
Ajax请求PHP后台接口返回信息的实例代码
2018/08/21 PHP
javascript URL编码和解码使用说明
2010/04/12 Javascript
JavaScript小技巧 2.5 则
2010/09/12 Javascript
javascript小数四舍五入多种方法实现
2012/12/23 Javascript
JS 打印界面的CSS居中代码适用所有浏览器
2014/03/19 Javascript
为什么Node.js会这么火呢?Node.js流行的原因
2014/12/01 Javascript
jqGrid中文文档之选项设置
2015/12/02 Javascript
浅析AngularJS中的指令
2016/03/20 Javascript
详解JavaScript中双等号引起的隐性类型转换
2016/05/30 Javascript
用jquery快速解决IE输入框不能输入的问题
2016/10/04 Javascript
javascript实现数据双向绑定的三种方式小结
2017/03/09 Javascript
React数据传递之组件内部通信的方法
2017/12/31 Javascript
浅析JS中什么是自定义react数据验证组件
2018/10/19 Javascript
在Web关闭页面时发送Ajax请求的实现方法
2019/03/07 Javascript
vue表单数据交互提交演示教程
2019/11/13 Javascript
vue跳转页面的几种方法(推荐)
2020/03/26 Javascript
分享给Python新手们的几道简单练习题
2017/09/21 Python
GitHub 热门:Python 算法大全,Star 超过 2 万
2019/04/29 Python
PyQt5通信机制 信号与槽详解
2019/08/07 Python
Python算法的时间复杂度和空间复杂度(实例解析)
2019/11/19 Python
tensorflow 只恢复部分模型参数的实例
2020/01/06 Python
Django表单提交后实现获取相同name的不同value值
2020/05/14 Python
澳洲国民品牌乡村路折扣店:Country Road & Trenery Outlet
2018/04/19 全球购物
施华洛世奇韩国官网:SWAROVSKI韩国
2018/06/05 全球购物
简历的自我评价
2014/02/03 职场文书
计算机通信专业推荐信
2014/02/22 职场文书
求职面试个人自我评价
2014/02/28 职场文书
孝老爱亲事迹材料
2014/12/24 职场文书
2019年个人工作总结范文
2019/03/25 职场文书
浅谈Redis在直播场景的实践方案
2021/04/27 Redis
Python接口自动化之文件上传/下载接口详解
2022/04/05 Python