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实现的二叉树算法和kmp算法实例
Apr 25 Python
Python入门学习之字符串与比较运算符
Oct 12 Python
在python的类中动态添加属性与生成对象
Sep 17 Python
python利用标准库如何获取本地IP示例详解
Nov 01 Python
python调用xlsxwriter创建xlsx的方法
May 03 Python
用python处理MS Word的实例讲解
May 08 Python
TensorFlow Session使用的两种方法小结
Jul 30 Python
使用Python 统计高频字数的方法
Jan 31 Python
django模型动态修改参数,增加 filter 字段的方式
Mar 16 Python
Python使用matplotlib绘制圆形代码实例
May 27 Python
使用sublime text3搭建Python编辑环境的实现
Jan 12 Python
Python字符串对齐方法使用(ljust()、rjust()和center())
Apr 26 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
分享8个最佳的代码片段在线测试网站
2013/06/29 PHP
PHP消息队列用法实例分析
2016/02/12 PHP
PHP 并发场景的几种解决方案
2019/06/14 PHP
js+css实现增加表单可用性之提示文字
2013/06/03 Javascript
JavaScript获取onclick、onchange等事件值的代码
2013/07/22 Javascript
js复制网页内容并兼容各主流浏览器的代码
2013/12/17 Javascript
JS实现网页表格自动变大缩小的方法
2015/03/09 Javascript
jQuery幻灯片特效代码分享--鼠标滑过按钮时切换(2)
2020/11/18 Javascript
javascript实现根据汉字获取简拼
2016/09/25 Javascript
Angular中使用MathJax遇到的一些问题
2017/12/15 Javascript
Nodejs模块载入运行原理
2018/02/23 NodeJs
使用webpack3.0配置webpack-dev-server教程
2018/05/29 Javascript
webpack打包react项目的实现方法
2018/06/21 Javascript
vue使用axios上传文件(FormData)的方法
2019/04/14 Javascript
在Vue mounted方法中使用data变量详解
2019/11/05 Javascript
JavaScript实现简单验证码
2020/08/24 Javascript
python 合并文件的具体实例
2013/08/08 Python
Python3搜索及替换文件中文本的方法
2015/05/22 Python
libreoffice python 操作word及excel文档的方法
2019/07/04 Python
python Shapely使用指南详解
2020/02/18 Python
Python3 io文本及原始流I/O工具用法详解
2020/03/23 Python
jupyter notebook 参数传递给shell命令行实例
2020/04/10 Python
python程序需要编译吗
2020/06/19 Python
Pycharm同步远程服务器调试的方法步骤
2020/11/04 Python
详解python中的异常和文件读写
2021/01/03 Python
websocket+sockjs+stompjs详解及实例代码
2018/11/30 HTML / CSS
澳大利亚女士时装在线:Rockmans
2018/09/26 全球购物
俄罗斯电动工具和设备购物网站:Vseinstrumenti.ru
2020/11/12 全球购物
华为python面试题
2016/05/03 面试题
毕业生就业推荐表自我鉴定
2014/03/20 职场文书
乡镇爱国卫生月活动总结
2014/06/25 职场文书
庆祝新中国成立65周年“向国旗敬礼”网上签名寄语
2014/09/27 职场文书
就业协议书范本
2014/10/08 职场文书
大学生年度个人总结
2015/02/15 职场文书
英文产品推荐信
2015/03/27 职场文书
幼儿园2016圣诞节活动总结
2016/03/31 职场文书