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操作数据库之sqlite3打开数据库、删除、修改示例
Mar 13 Python
python妹子图简单爬虫实例
Jul 07 Python
python编程开发之textwrap文本样式处理技巧
Nov 13 Python
python实现发送邮件功能代码
Dec 14 Python
python利用7z批量解压rar的实现
Aug 07 Python
python实现抠图给证件照换背景源码
Aug 20 Python
Python处理session的方法整理
Aug 29 Python
python3中rank函数的用法
Nov 27 Python
python 变量初始化空列表的例子
Nov 28 Python
使用opencv识别图像红色区域,并输出红色区域中心点坐标
Jun 02 Python
基于python调用jenkins-cli实现快速发布
Aug 14 Python
pandas将list数据拆分成行或列的实现
Dec 13 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使之能同时支持GIF和JPEG
2006/10/09 PHP
php查询相似度最高的字符串的方法
2015/03/12 PHP
使用Yii2实现主从数据库设置
2016/11/20 PHP
PHP命名空间namespace的定义方法详解
2017/03/29 PHP
Yii框架实现多数据库配置和操作的方法
2017/05/25 PHP
修改jQuery Validation里默认的验证方法
2012/02/14 Javascript
JavaScript 实现类的多种方法实例
2013/05/01 Javascript
深入理解javascript动态插入技术
2013/11/12 Javascript
javascript中sort()的用法实例分析
2015/01/30 Javascript
JQuery复制DOM节点的方法
2015/06/11 Javascript
Jquery幻灯片特效代码分享--鼠标点击按钮时切换(1)
2015/08/15 Javascript
input点击后placeholder中的提示消息消失
2016/01/15 Javascript
Jquery zTree 树控件异步加载操作
2016/02/25 Javascript
深入探究JavaScript中for循环的效率问题及相关优化
2016/03/13 Javascript
判断JS对象是否拥有某属性的方法推荐
2016/05/12 Javascript
jQuery实现获取元素索引值index的方法
2016/09/18 Javascript
使用BootStrapValidator完成前端输入验证
2016/09/28 Javascript
AjaxUpLoad.js实现文件上传
2018/03/05 Javascript
JS实现判断图片是否加载完成的方法分析
2018/07/31 Javascript
送你43道JS面试题(收藏)
2019/06/17 Javascript
mock.js模拟前后台交互
2019/07/25 Javascript
基于axios 的responseType类型的设置方法
2019/10/29 Javascript
解决在Vue中使用axios用form表单出现的问题
2019/10/30 Javascript
Vue项目打包压缩的实现(让页面更快响应)
2020/03/10 Javascript
Js数组扁平化实现方法代码总汇
2020/11/11 Javascript
如何利用JavaScript编写一个格斗小游戏
2021/01/06 Javascript
windows下安装python paramiko模块的代码
2013/02/10 Python
用Python编写一个简单的FUSE文件系统的教程
2015/04/02 Python
python通过配置文件共享全局变量的实例
2019/01/11 Python
python PrettyTable模块的安装与简单应用
2019/01/11 Python
在python image 中安装中文字体的实现方法
2019/08/22 Python
Python实现RGB与HSI颜色空间的互换方式
2019/11/27 Python
Django集成celery发送异步邮件实例
2019/12/17 Python
2014年情人节活动方案
2014/02/16 职场文书
雏鹰争章活动总结
2014/05/09 职场文书
先进教师个人总结
2015/02/11 职场文书