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使用递归解决全排列数字示例
Feb 11 Python
Python中对列表排序实例
Jan 04 Python
详解Python中expandtabs()方法的使用
May 18 Python
Python import用法以及与from...import的区别
May 28 Python
利用python实现命令行有道词典的方法示例
Jan 31 Python
使用DataFrame删除行和列的实例讲解
Apr 08 Python
flask框架使用orm连接数据库的方法示例
Jul 16 Python
django多种支付、并发订单处理实例代码
Dec 13 Python
Python内置类型性能分析过程实例
Jan 29 Python
Keras 中Leaky ReLU等高级激活函数的用法
Jul 05 Python
Python DES加密实现原理及实例解析
Jul 17 Python
如何基于python实现年会抽奖工具
Oct 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图片验证码代码
2008/03/27 PHP
php递归获取目录内文件(包含子目录)封装类分享
2013/12/25 PHP
memcache命令启动参数中文解释
2014/01/13 PHP
2014最热门的24个php类库汇总
2014/12/18 PHP
php根据某字段对多维数组进行排序的方法
2015/03/07 PHP
PHP连接MySQL数据的操作要点
2015/03/20 PHP
php的crc32函数使用时需要注意的问题(不然就是坑)
2015/04/21 PHP
PHP模拟asp中response类实现方法
2015/08/08 PHP
thinkphp3.x连接mysql数据库的方法(具体操作步骤)
2016/05/19 PHP
PHP常用的类封装小结【4个工具类】
2019/06/28 PHP
php求斐波那契数的两种实现方式【递归与递推】
2019/09/09 PHP
javascript中全局对象的isNaN()方法使用介绍
2013/12/19 Javascript
JavaScript字符串对象toLowerCase方法入门实例(用于把字母转换为小写)
2014/10/17 Javascript
分享28款免费实用的 JQuery 图片和内容滑块插件
2014/12/15 Javascript
JS 作用域与作用域链详解
2015/04/07 Javascript
js识别uc浏览器的代码
2015/11/06 Javascript
jQuery实现图片预加载效果
2015/11/27 Javascript
JavaScript接口的实现三种方式(推荐)
2016/06/14 Javascript
如何编写一个d.ts文件的步骤详解
2018/04/13 Javascript
基于layui轮播图满屏是高度自适应的解决方法
2019/09/16 Javascript
Vue程序化的事件监听器(实例方案详解)
2020/01/07 Javascript
[01:11:35]Liquid vs LGD 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
[59:42]Secret vs Alliacne 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/17 DOTA
python中map()与zip()操作方法
2016/02/27 Python
python数据分析数据标准化及离散化详解
2018/02/26 Python
python运行时强制刷新缓冲区的方法
2019/01/14 Python
基于python操作ES实例详解
2019/11/16 Python
如何基于pythonnet调用halcon脚本
2020/01/20 Python
基于Django OneToOneField和ForeignKey的区别详解
2020/03/30 Python
只要五步 就可以用HTML5/CSS3快速制作便签贴特效(图)
2012/06/04 HTML / CSS
来自Ocado的宠物商店:Fetch
2018/07/10 全球购物
英国家居用品和床上用品零售商:P&B Home
2020/01/16 全球购物
幼教毕业生自我鉴定
2014/01/12 职场文书
党的群众路线教育实践活动剖析材料
2014/09/30 职场文书
先进个人主要事迹范文
2015/11/04 职场文书
Java 实现限流器处理Rest接口请求详解流程
2021/11/02 Java/Android