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获取指定目录下所有文件名列表的方法
May 20 Python
matlab中实现矩阵删除一行或一列的方法
Apr 04 Python
python使用matplotlib绘制热图
Nov 07 Python
对Pyhon实现静态变量全局变量的方法详解
Jan 11 Python
python实现dijkstra最短路由算法
Jan 17 Python
使用python实现简单五子棋游戏
Jun 18 Python
浅谈pyqt5在QMainWindow中布局的问题
Jun 21 Python
pytorch中tensor张量数据类型的转化方式
Dec 31 Python
python实现音乐播放器 python实现花框音乐盒子
Feb 25 Python
django配置app中的静态文件步骤
Mar 27 Python
python脚本和网页有何区别
Jul 02 Python
Python pandas读取CSV文件的注意事项(适合新手)
Jun 20 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程序效率优化的一些策略小结
2010/07/17 PHP
PHP面向对象之旅:深入理解static变量与方法
2014/01/06 PHP
PHP扩展开发教程(总结)
2015/11/04 PHP
yii2使用ajax返回json的实现方法
2016/05/14 PHP
PHP7 mongoDB扩展使用的方法分享
2019/05/02 PHP
PHP命名空间用法实例分析
2019/09/04 PHP
javascript中apply和call方法的作用及区别说明
2014/02/14 Javascript
Javascript中call和apply函数的比较和使用实例
2015/02/03 Javascript
javascript实现简单的省市区三级联动
2015/05/14 Javascript
动态加载jQuery的方法
2015/06/16 Javascript
Node连接mysql数据库方法介绍
2017/02/07 Javascript
jQuery中 bind的用法简单介绍
2017/02/13 Javascript
微信小程序 navbar实例详解
2017/05/11 Javascript
详谈AngularJs 控制器、数据绑定、作用域
2017/07/09 Javascript
JavaScript基于数组实现的栈与队列操作示例
2018/12/22 Javascript
vue项目中引入Sass实例方法
2019/08/27 Javascript
[01:23]一分钟告诉你 DOTA2为什么叫信仰2
2014/06/20 DOTA
python 转换 Javascript %u 字符串为python unicode的代码
2016/09/06 Python
python批量设置多个Excel文件页眉页脚的脚本
2018/03/14 Python
python实现的MySQL增删改查操作实例小结
2018/12/19 Python
python读取图片的方式,以及将图片以三维数组的形式输出方法
2019/07/03 Python
python快速编写单行注释多行注释的方法
2019/07/31 Python
Python3 chardet模块查看编码格式的例子
2019/08/14 Python
Python判断字符串是否为空和null方法实例
2020/04/26 Python
opencv 图像腐蚀和图像膨胀的实现
2020/07/07 Python
Python安装第三方库攻略(pip和Anaconda)
2020/10/15 Python
python 如何上传包到pypi
2020/12/24 Python
基于PyInstaller各参数的含义说明
2021/03/04 Python
CSS3对背景图片的裁剪及尺寸和位置的设定方法
2016/03/07 HTML / CSS
英国香水店:The Perfume Shop
2017/03/27 全球购物
奇怪的鱼:Weird Fish
2018/03/18 全球购物
Aosom西班牙:家具在线商店
2020/06/11 全球购物
2014幼儿园小班工作总结
2014/11/10 职场文书
人事专员岗位职责
2015/02/03 职场文书
学雷锋日活动总结
2015/02/06 职场文书
Nginx解决前端访问资源跨域问题的方法详解
2021/03/31 Servers