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使用xlrd读取Excel格式文件的方法
Mar 10 Python
python使用PyGame模块播放声音的方法
May 20 Python
python妹子图简单爬虫实例
Jul 07 Python
在PyCharm环境中使用Jupyter Notebook的两种方法总结
May 24 Python
使用python中的in ,not in来检查元素是不是在列表中的方法
Jul 06 Python
python将txt文件读取为字典的示例
Dec 22 Python
Python设计模式之抽象工厂模式原理与用法详解
Jan 15 Python
Python面向对象程序设计之静态方法、类方法、属性方法原理与用法分析
Mar 23 Python
django项目中新增app的2种实现方法
Apr 01 Python
Django model重写save方法及update踩坑详解
Jul 27 Python
用Python写一个简易版弹球游戏
Apr 13 Python
pytorch 权重weight 与 梯度grad 可视化操作
Jun 05 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查询ip所在地的方法
2014/12/05 PHP
从性能方面考虑PHP下载远程文件的3种方法
2015/12/29 PHP
关于ThinkPhp 框架表单验证及ajax验证问题
2017/07/19 PHP
一个js封装的不错的选项卡效果代码
2008/02/15 Javascript
ExtJS4利根据登录后不同的角色分配不同的树形菜单
2014/05/02 Javascript
基于JavaScript实现弹出框效果
2016/02/19 Javascript
浅谈Jquery中Ajax异步请求中的async参数的作用
2016/06/06 Javascript
基于jQuery的AJAX和JSON实现纯html数据模板
2016/08/09 Javascript
jquery Banner轮播选项卡
2016/12/26 Javascript
数组Array的一些方法(总结)
2017/02/17 Javascript
js 用于检测类数组对象的函数方法
2017/05/02 Javascript
xmlplus组件设计系列之选项卡(Tabbar)(5)
2017/05/03 Javascript
React-Native实现ListView组件之上拉刷新实例(iOS和Android通用)
2017/07/11 Javascript
jQuery与vue实现拖动验证码功能
2018/01/30 jQuery
使用D3.js构建实时图形的示例代码
2018/08/28 Javascript
解决使用bootstrap的dropdown部件时报错:error:Bootstrap dropdown require Popper.js问题
2018/08/30 Javascript
js时间戳转yyyy-MM-dd HH-mm-ss工具类详解
2019/04/30 Javascript
vue父组件触发事件改变子组件的值的方法实例详解
2019/05/07 Javascript
使用kbone解决Vue项目同时支持小程序问题
2019/11/08 Javascript
Vue router传递参数并解决刷新页面参数丢失问题
2020/12/02 Vue.js
一个基于flask的web应用诞生 bootstrap框架美化(3)
2017/04/11 Python
python中hashlib模块用法示例
2017/10/30 Python
python list是否包含另一个list所有元素的实例
2018/05/04 Python
python实现将一个数组逆序输出的方法
2018/06/25 Python
python实现n个数中选出m个数的方法
2018/11/13 Python
Python3中的bytes和str类型详解
2019/05/02 Python
python实现提取str字符串/json中多级目录下的某个值
2020/02/27 Python
HTML5 Canvas 绘图——使用 Canvas 绘制图形图文教程 使用html5 canvas 绘制精美的图
2015/08/31 HTML / CSS
美国主要的特色咖啡和茶公司:Peet’s Coffee
2020/02/14 全球购物
自动化毕业生专业自荐书范文
2014/02/04 职场文书
环保倡议书范文
2014/05/12 职场文书
节水标语大全
2014/06/11 职场文书
励志演讲稿300字
2014/08/21 职场文书
劳模先进事迹材料
2014/12/24 职场文书
物业前台接待岗位职责
2015/04/03 职场文书
详解Java ES多节点任务的高效分发与收集实现
2021/06/30 Java/Android