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格式化字符串实例总结
Sep 28 Python
Python使用scrapy采集数据过程中放回下载过大页面的方法
Apr 08 Python
用Python实现web端用户登录和注册功能的教程
Apr 30 Python
Python Socket传输文件示例
Jan 16 Python
Python实现随机生成手机号及正则验证手机号的方法
Apr 25 Python
Python中的Django基本命令实例详解
Jul 15 Python
python计算无向图节点度的实例代码
Nov 22 Python
利用python画出AUC曲线的实例
Feb 28 Python
浅谈pandas dataframe对除数是零的处理
Jul 20 Python
python Matplotlib数据可视化(1):简单入门
Sep 30 Python
python动态规划算法实例详解
Nov 22 Python
Python 语言实现六大查找算法
Jun 30 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二分法查找数组是否包含某一元素
2013/05/23 PHP
php数组中包含中文的排序方法
2014/06/03 PHP
destoon找回管理员密码的方法
2014/06/21 PHP
PHP使用strtotime获取上个月、下个月、本月的日期
2015/12/30 PHP
PHP实现ASCII码与字符串相互转换的方法
2017/04/29 PHP
老生常谈PHP面向对象之标识映射
2017/06/21 PHP
PHP7新功能总结
2019/04/14 PHP
jquery $.ajax入门应用一
2008/11/19 Javascript
CSS+Jquery实现页面圆角框方法大全
2009/12/24 Javascript
锋利的jQuery 要点归纳(三) jQuery中的事件和动画(上:事件篇)
2010/03/24 Javascript
jQuery的初始化与对象构建之浅析
2011/04/12 Javascript
用javascript模仿ie的自动完成类似自动完成功的表单
2012/12/12 Javascript
Js中的onblur和onfocus事件应用介绍
2013/08/27 Javascript
VUE前端cookie简单操作
2017/10/17 Javascript
在 Node.js 中使用 async 函数的方法
2017/11/17 Javascript
深入理解JavaScript的async/await
2018/08/05 Javascript
jsonp跨域及实现百度首页联想功能的方法
2018/08/30 Javascript
原生js实现3D轮播图
2020/03/21 Javascript
[01:54]TI珍贵瞬间系列(五):压力
2020/08/29 DOTA
Python中的上下文管理器和with语句的使用
2018/04/17 Python
详解Python3 中hasattr()、getattr()、setattr()、delattr()函数及示例代码数
2018/04/18 Python
Python基于win32ui模块创建弹出式菜单示例
2018/05/09 Python
python3监控CentOS磁盘空间脚本
2018/06/21 Python
Python设计模式之观察者模式原理与用法详解
2019/01/16 Python
python中scrapy处理项目数据的实例分析
2020/11/22 Python
英国现代市场:ARKET
2019/04/10 全球购物
大学本科生的个人自我评价
2013/12/09 职场文书
优秀实习生主要事迹
2014/05/29 职场文书
客户答谢会活动方案
2014/08/31 职场文书
校园广播稿100字
2014/10/06 职场文书
2014年大学教师工作总结
2014/12/02 职场文书
工人先锋号申报材料
2014/12/29 职场文书
财务经理岗位职责
2015/01/31 职场文书
悬空寺导游词
2015/02/05 职场文书
python基础学习之生成器与文件系统知识总结
2021/05/25 Python
python神经网络ResNet50模型
2022/05/06 Python