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中使用mechanize模块模拟浏览器功能
May 05 Python
解决python使用open打开文件中文乱码的问题
Dec 29 Python
在python中利用最小二乘拟合二次抛物线函数的方法
Dec 29 Python
基于python历史天气采集的分析
Feb 14 Python
python中的colorlog库使用详解
Jul 05 Python
Python 微信爬虫完整实例【单线程与多线程】
Jul 06 Python
自定义实现 PyQt5 下拉复选框 ComboCheckBox的完整代码
Mar 30 Python
Python建造者模式案例运行原理解析
Jun 29 Python
浅析Python 序列化与反序列化
Aug 05 Python
python使用matplotlib绘制折线图的示例代码
Sep 22 Python
Python基于Serializer实现字段验证及序列化
Nov 04 Python
python链表类中获取元素实例方法
Feb 23 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 is_subclass_of函数的一个BUG和解决方法
2014/06/01 PHP
yii2中使用Active Record模式的方法
2016/01/09 PHP
php简单统计在线人数的方法
2016/05/10 PHP
php爬取天猫和淘宝商品数据
2018/02/23 PHP
PHP实现的mongoDB数据库操作类完整实例
2018/04/10 PHP
用javascript做拖动布局的思路
2008/05/31 Javascript
js编码之encodeURIComponent使用介绍(asp,php)
2012/03/01 Javascript
jquery操作cookie插件分享
2014/01/14 Javascript
jQuery自定义事件的简单实现代码
2014/01/27 Javascript
js制作可以延时消失的菜单
2017/01/13 Javascript
jQuery仿IOS弹出框插件
2017/02/18 Javascript
jQuery中each循环的跳出和结束实例
2017/08/16 jQuery
详解.vue文件中监听input输入事件(oninput)
2017/09/19 Javascript
js针对图片加载失败的处理方法分析
2019/08/24 Javascript
小程序如何自主实现拦截器的示例代码
2019/11/04 Javascript
微信小程序封装多张图片上传api代码实例
2019/12/30 Javascript
JS数组方法reduce的用法实例分析
2020/03/03 Javascript
利用aardio给python编写图形界面
2017/08/21 Python
解决Python的str强转int时遇到的问题
2018/04/09 Python
Python面向对象思想与应用入门教程【类与对象】
2019/04/12 Python
如何基于Python实现数字类型转换
2020/02/07 Python
html5播放视频且动态截图实现步骤与代码(支持safari其他未测试)
2013/01/06 HTML / CSS
HTML5单页面手势滑屏切换原理
2016/03/21 HTML / CSS
英国排名第一的停车场运营商:NCP
2019/08/26 全球购物
HomeAway英国:全球领先的度假租赁在线市场
2020/02/03 全球购物
铭万公司.net面试题笔试题
2014/07/20 面试题
OSPF有什么优点?为什么OSPF比RIP收敛快?
2013/02/13 面试题
园长自我鉴定
2013/10/06 职场文书
婚前协议书范本
2014/04/15 职场文书
党的群众路线教育实践活动领导班子对照检查材料
2014/09/25 职场文书
高三英语复习计划
2015/01/19 职场文书
小学端午节活动总结
2015/02/11 职场文书
js中Object.create实例用法详解
2021/10/05 Javascript
Golang 并发下的问题定位及解决方案
2022/03/16 Golang
python图像处理 PIL Image操作实例
2022/04/09 Python
在MySQL中你成功的避开了所有索引
2022/04/20 MySQL