Python命令行参数定义及需要注意的地方


Posted in Python onNovember 30, 2020

在命令行中运行python代码是很常见的,下面介绍如何定义命令后面跟的参数。

1  常规用法

Python代码中主要使用下面几行代码来定义并获取需要在命令行中赋值的参数:

import argparse 
 
parser = argparse.ArgumentParser("Description.") # ————1————
parser.add_argument('--test1', type=str, default="1", help="Test1 help.") # ————2————
parser.add_argument('--test2', type=float, default=2.1, help="Test2 help.") # ————2————
args = parser.parse_args() # ————3————

print(args)
test1, test2 = args.test1, args.test2 # ————4———— 
print(type(test1), test1, test1 + " add test") 
print(type(test2), test2, test2 + 100)

注释:

1、获取外部参数对象实例。可以传入字符串来描述总体的外部参数。

2、定义外部参数,可以多次调用来定义多个外部参数。函数的第一个参数是外部参数的名称,建议以两个减号开头,中间不要使用数字字母下划线以外的符号,否则容易出错。type是你希望外部参数传入后转换的类型,比如--test1定义为str,即使命令行传参不添加引号,函数也将它转换为字符串(当然不加引号传字符串就不能用空格了)。而--test2是float,即使命令行传参带了引号,只要能转换为数字,函数都能转换为float类型。default是外部参数的默认值。如果命令行不对外部参数赋值而使用默认值,函数不会对你定义的默认值进行type上的转换,所以default最好直接定义为type指定的类型(比如--test1的default定义为"1"而不是1)。help传入对当前外部参数的描述,命令行中使用--help输出的就是这个。 

3、分析获取的外部参数。传出的是一个命名空间,类似于字典,但使用属性的方式而不是key索引来获取命名对应的外部参数值。

4、以获取属性的方式获取外部参数。

需要注意的是,外部参数的定义必须写在获取外部参数之前。也就是说,parser.add_argument()要写在parser.parse_args()之前,否则外部参数无法被命令行捕获。另外,如果代码中没有parser.parse_args(),命令行就不能传参。

用命令行执行以上代码,命令与输出如下(以上代码保存为test.py):

Python命令行参数定义及需要注意的地方

可以看出,故意以数字和字符串的方式分别对字符串和float类型的外部参数赋值,函数都能正确地转换并正确地参与运算。

使用默认值时输出如下:

Python命令行参数定义及需要注意的地方

2  注意事项 

通过以上的实验,argparse库似乎能将外部参数正确转换为各种类型,只要能转换。下面来实验是否能传入一个numpy数组。代码如下:

import numpy as np
import argparse 
 
parser = argparse.ArgumentParser() 
parser.add_argument('--array', type=np.array, default=np.array([1,2])) 
args = parser.parse_args() 

print(args) 
array = args.array
print(type(array))
print(array)
print(array + 1)

当使用默认值时:

Python命令行参数定义及需要注意的地方

运行正确,但当我们意图传入外部参数时:

Python命令行参数定义及需要注意的地方

尽管传入的[1,2]被转换为numpy.ndarray类型,它却并不能参与运算。所以,并不是所有的类型都能在命令行中传入的。

以上就是Python命令行参数定义及需要注意的地方的详细内容,更多关于Python命令行参数的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
Python应用03 使用PyQT制作视频播放器实例
Dec 07 Python
Python常见异常分类与处理方法
Jun 04 Python
Python实现发送QQ邮件的封装
Jul 14 Python
使用python将mysql数据库的数据转换为json数据的方法
Jul 01 Python
Django REST Framework序列化外键获取外键的值方法
Jul 26 Python
Django实现文件上传和下载功能
Oct 06 Python
python 多进程队列数据处理详解
Dec 23 Python
浅谈ROC曲线的最佳阈值如何选取
Feb 28 Python
django 扩展user用户字段inlines方式
Mar 30 Python
django创建超级用户时指定添加其它字段方式
May 14 Python
keras 自定义loss损失函数,sample在loss上的加权和metric详解
May 23 Python
自定义Django_rest_framework_jwt登陆错误返回的解决
Oct 18 Python
用sleep间隔进行python反爬虫的实例讲解
Nov 30 #Python
Python基于Faker假数据构造库
Nov 30 #Python
python爬虫调度器用法及实例代码
Nov 30 #Python
python爬虫中url管理器去重操作实例
Nov 30 #Python
python爬虫中的url下载器用法详解
Nov 30 #Python
Python接口自动化测试框架运行原理及流程
Nov 30 #Python
Django数据模型中on_delete使用详解
Nov 30 #Python
You might like
MySQL中create table语句的基本语法是
2007/01/15 PHP
dedecms 制作模板中使用的全局标记图文教程
2007/03/11 PHP
php UTF8 文件的签名问题
2009/10/30 PHP
php empty函数判断mysql表单是否为空
2010/04/12 PHP
初品cakephp 入门基础
2012/02/16 PHP
利用PHP fsockopen 模拟POST/GET传送数据的方法
2015/09/22 PHP
CI框架常用函数封装实例
2016/11/21 PHP
jquery $.ajax()取xml数据的小问题解决方法
2010/11/20 Javascript
js点击列表文字对应该行显示背景颜色的实现代码
2015/08/05 Javascript
Jquery 分页插件之Jquery Pagination
2015/08/25 Javascript
node.js使用cluster实现多进程
2016/03/17 Javascript
AJAX实现瀑布流触发分页与分页触发瀑布流的方法
2016/05/23 Javascript
jQuery轮播图效果精简版完整示例
2016/09/04 Javascript
JavaScript数组去重的几种方法效率测试
2016/10/23 Javascript
纯js实现悬浮按钮组件
2016/12/17 Javascript
关于js中的鼠标事件总结
2017/07/11 Javascript
Vue三种常用传值示例(父传子、子传父、非父子)
2018/07/24 Javascript
微信小程序云开发实现增删改查功能
2019/05/17 Javascript
Python实现过滤单个Android程序日志脚本分享
2015/01/16 Python
Python时间模块datetime、time、calendar的使用方法
2016/01/13 Python
Python tkinter模块弹出窗口及传值回到主窗口操作详解
2017/07/28 Python
Python语言快速上手学习方法
2018/12/14 Python
Django实现文件上传下载功能
2019/10/06 Python
Python 复平面绘图实例
2019/11/21 Python
python实现把两个二维array叠加成三维array示例
2019/11/29 Python
Python pip配置国内源的方法
2020/02/14 Python
浅谈numpy中np.array()与np.asarray的区别以及.tolist
2020/06/03 Python
利用HTML5中Geolocation获取地理位置调用Google Map API在Google Map上定位
2013/01/23 HTML / CSS
金智子午JAVA面试题
2015/09/04 面试题
数据库什么时候应该被重组
2012/11/02 面试题
工商管理系学生的自我评价分享
2013/11/29 职场文书
电气自动化专业职业规划范文
2014/02/16 职场文书
数控机床专业自荐信
2014/05/19 职场文书
食品质量与安全专业毕业生求职信
2014/08/11 职场文书
测量JavaScript函数的性能各种方式对比
2021/04/27 Javascript
Zabbix6通过ODBC方式监控Oracle 19C的详细过程
2022/09/23 Servers