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 相关文章推荐
利用Anaconda完美解决Python 2与python 3的共存问题
May 25 Python
python opencv 图像尺寸变换方法
Apr 02 Python
如何用python写一个简单的词法分析器
Dec 18 Python
Python饼状图的绘制实例
Jan 15 Python
pandas去重复行并分类汇总的实现方法
Jan 29 Python
Python爬虫学习之获取指定网页源码
Jul 30 Python
Python基本语法之运算符功能与用法详解
Oct 22 Python
PyCharm Anaconda配置PyQt5开发环境及创建项目的教程详解
Mar 24 Python
Python实现初始化不同的变量类型为空值
Jun 02 Python
通过实例简单了解python yield使用方法
Aug 06 Python
Python爬取数据并实现可视化代码解析
Aug 12 Python
python面向对象版学生信息管理系统
Jun 24 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
smarty高级特性之过滤器的使用方法
2015/12/25 PHP
php 一维数组的循环遍历实现代码
2017/04/10 PHP
深入理解PHP的远程多会话调试
2017/09/21 PHP
PHP两个n位的二进制整数相加问题的解决
2018/08/26 PHP
PHP中数组转换为SimpleXML教程
2019/01/27 PHP
laravel清除视图缓存的代码
2019/10/23 PHP
javascript编程起步(第七课)
2007/01/10 Javascript
学习YUI.Ext基础第一天
2007/03/10 Javascript
JAVASCRIPT IE 与 FF中兼容问题小结
2009/02/18 Javascript
通过DOM脚本去设置样式信息
2010/09/19 Javascript
jQuery EasyUI API 中文文档 - NumberBox数字框
2011/10/13 Javascript
jQuery实现TAB风格的全国省份城市滑动切换效果代码
2015/08/24 Javascript
Angularjs 动态改变title标题(兼容ios)
2016/12/29 Javascript
JS实现匀加速与匀减速运动的方法示例
2017/09/04 Javascript
使用vuex的state状态对象的5种方式
2018/04/19 Javascript
jQuery实现的点击标题文字切换字体效果示例【测试可用】
2018/04/26 jQuery
vue实现文字横向无缝走马灯组件效果的实例代码
2019/04/09 Javascript
vue+element tabs选项卡分页效果
2020/06/29 Javascript
在Vue中使用this.$store或者是$route一直报错的解决
2019/11/08 Javascript
Python with的用法
2014/08/22 Python
python友情链接检查方法
2015/07/08 Python
python中正则表达式 re.findall 用法
2018/10/23 Python
Python寻找两个有序数组的中位数实例详解
2018/12/05 Python
python ChainMap的使用和说明详解
2019/06/11 Python
Python3内置模块random随机方法小结
2019/07/13 Python
详解Python中字符串前“b”,“r”,“u”,“f”的作用
2019/12/18 Python
浅析matlab中imadjust函数
2020/02/27 Python
python实现遍历文件夹图片并重命名
2020/03/23 Python
一文弄懂Pytorch的DataLoader, DataSet, Sampler之间的关系
2020/07/03 Python
python实现xml转json文件的示例代码
2020/12/30 Python
CSS3中的弹性布局em运用入门详解 1em等于多少像素
2021/02/08 HTML / CSS
地球上最先进的胡子和头发修剪器:Bevel
2018/01/23 全球购物
外贸会计专业自荐信
2014/06/22 职场文书
投标授权委托书范文
2014/08/02 职场文书
go语言map与string的相互转换的实现
2021/04/07 Golang