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创建声明性迷你语言的教程
Apr 13 Python
从Python的源码浅要剖析Python的内存管理
Apr 16 Python
python友情链接检查方法
Jul 08 Python
Python2 Selenium元素定位的实现(8种)
Feb 25 Python
浅谈Pandas Series 和 Numpy array中的相同点
Jun 28 Python
python标记语句块使用方法总结
Aug 05 Python
python TK库简单应用(实时显示子进程输出)
Oct 29 Python
python matplotlib 画dataframe的时间序列图实例
Nov 20 Python
python创建学生成绩管理系统
Nov 22 Python
使用tensorflow实现矩阵分解方式
Feb 07 Python
详解python命令提示符窗口下如何运行python脚本
Sep 11 Python
python实现猜拳游戏项目
Nov 30 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
Ha0k 0.3 PHP 网页木马修改版
2009/10/11 PHP
PHP 透明水印生成代码
2012/08/27 PHP
比较discuz和ecshop的截取字符串函数php版
2012/09/03 PHP
浅谈使用 PHP 进行手机 APP 开发(API 接口开发)
2014/08/11 PHP
PHP简单获取上月、本月、近15天、近30天的方法示例
2017/07/03 PHP
一个实用的php验证码类
2017/07/06 PHP
laravel7学习之无限级分类的最新实现方法
2020/09/30 PHP
jquery定时滑出可最小化的底部提示层特效代码
2013/10/02 Javascript
js调试系列 断点与动态调试[基础篇]
2014/06/18 Javascript
简单谈谈jQuery(function(){})与(function(){})(jQuery)
2014/12/19 Javascript
浅析JavaScript动画
2015/06/10 Javascript
原生js实现图片轮播特效
2015/12/18 Javascript
jQuery Form 表单提交插件之formSerialize,fieldSerialize,fieldValue,resetForm,clearForm,clearFields的应用
2016/01/23 Javascript
JS动态遍历json中所有键值对的方法(不知道属性名的情况)
2016/12/28 Javascript
基于JavaScript实现弹幕特效
2020/08/27 Javascript
JavaScript如何获取到导航条中HTTP信息
2017/10/10 Javascript
jQuery实现鼠标响应式透明度渐变动画效果示例
2018/02/13 jQuery
layui的layedit富文本赋值方法
2019/09/18 Javascript
Vue如何使用混合Mixins和插件开发详解
2020/02/05 Javascript
微信小程序后端无法保持session的原因及解决办法问题
2020/03/20 Javascript
web.py中调用文件夹内模板的方法
2014/08/26 Python
在Python中使用next()方法操作文件的教程
2015/05/24 Python
Python 描述符(Descriptor)入门
2016/11/20 Python
python的文件操作方法汇总
2017/11/10 Python
pandas 取出表中一列数据所有的值并转换为array类型的方法
2018/04/11 Python
Python数据报表之Excel操作模块用法分析
2019/03/11 Python
linux安装python修改默认python版本方法
2019/03/31 Python
django 通过URL访问上传的文件方法
2019/07/28 Python
详解python UDP 编程
2020/08/24 Python
python 两种方法修改文件的创建时间、修改时间、访问时间
2020/09/26 Python
如何基于Python按行合并两个txt
2020/11/03 Python
SQL Server数据库笔试题和答案
2016/02/04 面试题
物流仓管员工作职责
2014/01/06 职场文书
2016年11月份红领巾广播稿
2015/12/21 职场文书
辞职申请书范本
2019/05/20 职场文书
tensorflow+k-means聚类简单实现猫狗图像分类的方法
2021/04/28 Python