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 ip正则式
May 07 Python
Python操作串口的方法
Jun 17 Python
pandas.loc 选取指定列进行操作的实例
May 18 Python
python逆序打印各位数字的方法
Jun 25 Python
python 函数内部修改外部变量的方法
Dec 18 Python
Numpy之random函数使用学习
Jan 29 Python
numpy linalg模块的具体使用方法
May 26 Python
Python实现获取系统临时目录及临时文件的方法示例
Jun 26 Python
python3.7 sys模块的具体使用
Jul 22 Python
python 3.8.3 安装配置图文教程
May 21 Python
Python私有属性私有方法应用实例解析
Sep 15 Python
使用Python开发贪吃蛇游戏 SnakeGame
Apr 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中文件上传的一个问题
2010/09/04 PHP
php购物车实现代码
2011/10/10 PHP
php 启动报错如何解决
2014/01/17 PHP
浅谈PHP调用Webservice思路及源码分享
2014/06/04 PHP
php字符串分割函数用法实例
2015/03/17 PHP
php获取网页里所有图片并存入数组的方法
2015/04/06 PHP
PHP利用二叉堆实现TopK-算法的方法详解
2017/04/24 PHP
50款非常棒的 jQuery 插件分享
2012/03/29 Javascript
JavaScript数据结构和算法之图和图算法
2015/02/11 Javascript
jQuery+CSS3实现3D立方体旋转效果
2015/11/10 Javascript
jQuery实现移动端滑块拖动选择数字效果
2015/12/24 Javascript
BOM系列第三篇之定时器应用(时钟、倒计时、秒表和闹钟)
2016/08/17 Javascript
微信小程序 SocketIO 实例讲解
2016/10/13 Javascript
Vue.js学习教程之列表渲染详解
2017/05/17 Javascript
基于Cookie常用操作以及属性介绍
2017/09/07 Javascript
使用Electron构建React+Webpack桌面应用的方法
2017/12/15 Javascript
利用vue.js把静态json绑定bootstrap的table方法
2018/08/28 Javascript
JavaScript继承与聚合实例详解
2019/01/22 Javascript
layui弹出框Tab选项卡的示例代码
2019/09/04 Javascript
JavaScript正则表达式验证登录实例
2020/03/18 Javascript
[01:08:33]OG vs VGJ.T 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
[01:07:34]DOTA2-DPC中国联赛定级赛 RNG vs Aster BO3第二场 1月9日
2021/03/11 DOTA
python数据清洗系列之字符串处理详解
2017/02/12 Python
基于python OpenCV实现动态人脸检测
2018/05/25 Python
Python语言异常处理测试过程解析
2020/01/08 Python
java关于string最常出现的面试题整理
2021/01/18 Python
用HTML5 实现橡皮擦的涂抹效果的教程
2015/05/11 HTML / CSS
使用HTML5 Canvas为图片填充颜色和纹理的教程
2016/03/21 HTML / CSS
THE OUTNET美国官网:国际设计师品牌折扣网站
2017/03/07 全球购物
Kiwi.com中国:找到特价机票并发现新目的地
2019/10/27 全球购物
简述索引存取方法的作用和建立索引的原则
2013/03/26 面试题
一般基层干部群众路线教育实践活动个人对照检查材料
2014/11/04 职场文书
兴趣班停课通知
2015/04/24 职场文书
2015年农村党员公开承诺事项
2015/04/28 职场文书
大学生军训心得体会5篇
2019/08/15 职场文书
解决Mysql报错 Table 'mysql.user' doesn't exist
2022/05/06 MySQL