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 相关文章推荐
在NumPy中创建空数组/矩阵的方法
Jun 15 Python
Python动态导入模块的方法实例分析
Jun 28 Python
Python实现将HTML转成PDF的方法分析
May 04 Python
Python Pandas分组聚合的实现方法
Jul 02 Python
Django 全局的static和templates的使用详解
Jul 19 Python
python标识符命名规范原理解析
Jan 10 Python
python计算二维矩形IOU实例
Jan 18 Python
django有外键关系的两张表如何相互查找
Feb 10 Python
关于Python3爬虫利器Appium的安装步骤
Jul 29 Python
python 提高开发效率的5个小技巧
Oct 19 Python
Python OpenCV实现传统图片格式与base64转换
Jun 13 Python
python缺失值填充方法示例代码
Dec 24 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
PHP中对数据库操作的封装
2006/10/09 PHP
str_replace只替换一次字符串的方法
2013/04/09 PHP
什么是PHP文件?如何打开PHP文件?
2017/06/27 PHP
PHP进阶学习之类的自动加载机制原理分析
2019/06/18 PHP
prototype.js的Ajax对象
2006/09/23 Javascript
IE无法设置短域名下Cookie
2010/09/23 Javascript
select标签模拟/美化方法采用JS外挂式插件
2013/04/01 Javascript
编写js扩展方法判断一个数组中是否包含某个元素
2013/11/08 Javascript
jquery+html5烂漫爱心表白动画代码分享
2015/08/24 Javascript
三分钟带你玩转jQuery.noConflict()
2016/02/15 Javascript
jQuery on()方法绑定动态元素的点击事件无响应的解决办法
2016/07/07 Javascript
利用nodejs监控文件变化并使用sftp上传到服务器
2017/02/18 NodeJs
jQuery插件zTree实现删除树子节点的方法示例
2017/03/08 Javascript
原生JS京东轮播图代码
2017/03/22 Javascript
移动端触屏幻灯片图片切换插件idangerous swiper.js
2017/04/10 Javascript
OkHttp踩坑随笔为何 response.body().string() 只能调用一次
2018/01/08 Javascript
详解Nuxt.js部署及踩过的坑
2018/08/07 Javascript
利用vue重构有赞商城的思路以及总结整理
2019/02/21 Javascript
ES6 let和const定义变量与常量的应用实例分析
2019/06/27 Javascript
python实现用于测试网站访问速率的方法
2015/05/26 Python
python numpy实现rolling滚动案例
2020/06/08 Python
解决python 虚拟环境删除包无法加载的问题
2020/07/13 Python
Web页面中八种创建多列等高(等高列布局)的实现技术
2012/12/24 HTML / CSS
德国苹果商店:MacTrade
2020/05/18 全球购物
限量版运动鞋和街头服饰:TheDrop
2020/09/06 全球购物
Otiumberg官网:英国半精致珠宝品牌
2021/01/16 全球购物
工程造价专业大专生求职信
2013/10/06 职场文书
工业学校毕业生自荐书
2014/01/03 职场文书
餐饮总经理岗位职责
2014/03/07 职场文书
集体生日活动方案
2014/08/18 职场文书
物流专业专科生职业生涯规划书
2014/09/14 职场文书
习近平在党的群众路线教育实践活动总结大会上的讲话
2014/10/21 职场文书
2014年团工作总结
2014/11/27 职场文书
城镇居民医疗保险工作总结
2015/08/10 职场文书
销售会议开幕词
2016/03/04 职场文书
win10双系统怎么删除一个系统?win10电脑有两个系统删除一个的操作方法
2022/07/15 数码科技