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基础之函数用法实例详解
Sep 10 Python
python使用BeautifulSoup分页网页中超链接的方法
Apr 04 Python
Python及Django框架生成二维码的方法分析
Jan 31 Python
python实现猜数字小游戏
Mar 24 Python
python实现简单名片管理系统
Nov 30 Python
python如何实现视频转代码视频
Jun 17 Python
python科学计算之numpy——ufunc函数用法
Nov 25 Python
Python中格式化字符串的四种实现
May 26 Python
python实现斗地主分牌洗牌
Jun 22 Python
Python实现数字的格式化输出
Aug 01 Python
Scrapy-Redis之RedisSpider与RedisCrawlSpider详解
Nov 18 Python
python 模拟在天空中放风筝的示例代码
Apr 21 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压缩多个CSS为一个css的代码并缓存
2011/04/21 PHP
PHP屏蔽过滤指定关键字的方法
2014/11/03 PHP
php数据库操作model类(使用__call方法)
2016/11/16 PHP
PHP实现微信公众号验证Token的示例代码
2019/12/16 PHP
php查看一个变量的占用内存的实例代码
2020/03/29 PHP
javascript中强制执行toString()具体实现
2013/04/27 Javascript
Javascript级联下拉菜单以及AJAX数据验证核心代码
2013/05/10 Javascript
javascript浏览器兼容教程之事件处理
2014/06/09 Javascript
jquery实现仿JqueryUi可拖动的DIV实例
2015/07/31 Javascript
javascript 动态修改css样式方法汇总(四种方法)
2015/08/27 Javascript
基于jQuery插件实现点击小图显示大图效果
2016/05/11 Javascript
JavaScript拖动层Div代码
2017/03/01 Javascript
Node+Express+MongoDB实现登录注册功能实例
2017/04/23 Javascript
Vue-Router进阶之滚动行为详解
2017/09/13 Javascript
vue.js实现简单轮播图效果
2017/10/10 Javascript
JS实现点击复选框变更DIV显示状态的示例代码
2017/12/18 Javascript
详解Angular路由之路由守卫
2018/05/10 Javascript
JS实现快递单打印功能【推荐】
2018/06/21 Javascript
JS/jQuery实现获取时间的方法及常用类完整示例
2019/03/07 jQuery
vue解决花括号数据绑定不成功的问题
2019/10/30 Javascript
[08:08]DOTA2-DPC中国联赛2月28日Recap集锦
2021/03/11 DOTA
python文件特定行插入和替换实例详解
2017/07/12 Python
Python实现的视频播放器功能完整示例
2018/02/01 Python
解决nohup执行python程序log文件写入不及时的问题
2019/01/14 Python
windows环境中利用celery实现简单任务队列过程解析
2019/11/29 Python
Python实现将蓝底照片转化为白底照片功能完整实例
2019/12/13 Python
python实现FTP循环上传文件
2020/03/20 Python
django xadmin中form_layout添加字段显示方式
2020/03/30 Python
浅谈在JupyterNotebook下导入自己的模块的问题
2020/04/16 Python
关于box-sizing的全面理解
2016/07/28 HTML / CSS
90后毕业生的求职信范文
2013/09/21 职场文书
大学生的应聘自我评价
2013/12/13 职场文书
事假请假条范文
2014/04/11 职场文书
新疆民族团结演讲稿
2014/08/27 职场文书
幼师辞职信范文大全
2015/05/12 职场文书
使用Ajax实现进度条的绘制
2022/04/07 Javascript