Python编写带选项的命令行程序方法


Posted in Python onAugust 13, 2019

运行python程序时,有时需要在命令行传入一些参数。常见的方式是在执行时,在脚本名后直接追加空格分隔的参数列表(例如 python test.py arg0 arg1 arg2),然后在脚本中就可以通过sys.argv获取所有的命令行参数。

这种方式的优点是传参方便,参数获取简单;缺点是执行脚本时,必须知道参数的顺序,并且不能设置默认值,所有参数每次都必须传入。

还有一种命令行传参方式是通过带选项的方式进行传参(例如python test.py -p0=arg0 -p1=arg1)。

这种方式的优点是参数不用按照固定的顺序传入,并且对于有默认值的参数,可以不传参数直接使用默认值;缺点是传入参数时需要额外加上选项。

对于带选项的命令行参数,可以通过python自带的getopt模块来进行解析。

主要方法:

getopt(args, shortopts, longopts = []):解析命令行选项和参数列表。

args是不包括运行程序引用的参数列表,通常来说就是sys.args[1:]。

shortopts是脚本要识别的短选项字母,如果短选项需要参数,需要在字母后加冒号“:”。

longopts是支持的长选项,是一个长选项名称的列表。选项名称不包括“-”。需要参数的长选项,需要在后面加一个等号“=”。

返回值包括两个列表:第一个列表中是(选项,值),如果选项没有参数,值为空字符串。第二个列表是剥离选项之后的程序参数列表。长项前用“--”,短项前用“-”。

另外要注意的是当进行命令行参数解析时,如果遇到了非选项的参数时,就会停止带选项参数的解析。

简单示例

#!/usr/bin/python
# -*- coding: gbk -*-
import sys
import getopt
def printUsage():
	print ('''usage: test.py -i <input> -o <output>
    test.py --in=<input> --out=<output>''')
 
def main():
	inputarg=""
	outputarg=""
	try:
		opts, args = getopt.getopt(sys.argv[1:],"hi:o:",["in=","out="])
	except getopt.GetoptError:
		printUsage()
		sys.exit(-1)
	for opt,arg in opts:
		if opt == '-h':
			printUsage()
		elif opt in ("-i", "--in"):
			inputarg=arg
		elif opt in ("-o","--out"):
			outputarg=arg
	print ('输入:'+inputarg)
	print ('输出:'+outputarg)
	print ('其他程序参数:'+",".join(args))
if __name__=="__main__":
	main()

以上这篇Python编写带选项的命令行程序方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python复制目录结构脚本代码分享
Mar 06 Python
浅谈Python中数据解析
May 05 Python
Python随机数random模块使用指南
Sep 09 Python
Python中使用支持向量机(SVM)算法
Dec 26 Python
详解Python自建logging模块
Jan 29 Python
Django实战之用户认证(初始配置)
Jul 16 Python
代码详解django中数据库设置
Jan 28 Python
python绘制规则网络图形实例
Dec 09 Python
Pytest参数化parametrize使用代码实例
Feb 22 Python
python opencv pytesseract 验证码识别的实现
Aug 28 Python
浅谈Python __init__.py的作用
Oct 28 Python
python解决OpenCV在读取显示图片的时候闪退的问题
Feb 23 Python
使用python模拟命令行终端的示例
Aug 13 #Python
在macOS上搭建python环境的实现方法
Aug 13 #Python
解决Mac下使用python的坑
Aug 13 #Python
python 接口实现 供第三方调用的例子
Aug 13 #Python
python 爬取学信网登录页面的例子
Aug 13 #Python
利用anaconda作为python的依赖库管理方法
Aug 13 #Python
基于Python的图像数据增强Data Augmentation解析
Aug 13 #Python
You might like
php实现图片添加描边字和马赛克的方法
2014/12/10 PHP
PHP编写文件多服务器同步程序
2016/07/02 PHP
yii2安装详细流程
2018/05/23 PHP
详解php伪造Referer请求反盗链资源
2019/01/24 PHP
JavaScript DOM学习第八章 表单错误提示
2010/02/19 Javascript
Extjs优化(一)删除冗余代码提高运行速度
2013/04/15 Javascript
js防止表单重复提交的两种方法
2013/09/30 Javascript
使用JavaScript实现Java的List功能(实例讲解)
2013/11/07 Javascript
js中将String转换为number以便比较
2014/07/08 Javascript
javascript实现图像循环明暗变化的方法
2015/02/25 Javascript
基于JavaScript实现单选框下拉菜单添加文件效果
2016/06/26 Javascript
jQuery下拉菜单的实现代码
2016/11/03 Javascript
JavaScript队列函数和异步执行详解
2017/06/19 Javascript
node.js 利用流实现读写同步,边读边写的方法
2017/09/11 Javascript
Vue2.0基于vue-cli+webpack同级组件之间的通信教程(推荐)
2017/09/14 Javascript
Vue-Router模式和钩子的用法
2018/02/28 Javascript
js中el表达式的使用和非空判断方法
2018/03/28 Javascript
vue组件实现弹出框点击显示隐藏效果
2020/10/26 Javascript
vue mint-ui tabbar变组件使用
2018/05/04 Javascript
微信小程序自定义弹窗实现详解(可通用)
2019/07/04 Javascript
微信小程序解析富文本过程详解
2019/07/13 Javascript
JavaScript中的相等操作符使用详解
2019/12/21 Javascript
Js生成随机数/随机字符串的方法小结【5种方法】
2020/05/27 Javascript
使用C语言来扩展Python程序和Zope服务器的教程
2015/04/14 Python
Linux 下 Python 实现按任意键退出的实现方法
2016/09/25 Python
python3 自动打印出最新版本执行的mysql2redis实例
2020/04/09 Python
Python3操作读写CSV文件使用包过程解析
2020/04/10 Python
Pandas把dataframe或series转换成list的方法
2020/06/14 Python
使用Python项目生成所有依赖包的清单方式
2020/07/13 Python
Python之京东商品秒杀的实现示例
2021/01/06 Python
解决H5的a标签的download属性下载service上的文件出现跨域问题
2019/07/16 HTML / CSS
戴尔美国官方折扣店:Dell Outlet
2018/02/13 全球购物
2015年度销售个人工作总结
2015/03/31 职场文书
生产实习心得体会范文
2016/01/22 职场文书
《山中访友》教学反思
2016/02/24 职场文书
JavaCV实现照片马赛克效果
2022/01/22 Java/Android