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 性能优化技巧总结
Nov 01 Python
Windows和Linux下Python输出彩色文字的方法教程
May 02 Python
python实现求最长回文子串长度
Jan 22 Python
pandas数据清洗,排序,索引设置,数据选取方法
May 18 Python
详解python之协程gevent模块
Jun 14 Python
python-tkinter之按钮的使用,开关方法
Jun 11 Python
python接口调用已训练好的caffe模型测试分类方法
Aug 26 Python
pytorch torchvision.ImageFolder的用法介绍
Feb 20 Python
Python datetime 格式化 明天,昨天实例
Mar 02 Python
python实现canny边缘检测
Sep 14 Python
Python使用protobuf序列化和反序列化的实现
May 19 Python
Python selenium的这三种等待方式一定要会!
Jun 10 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
消息持续发送的完整例子
2006/10/09 PHP
PHP循环输出指定目录下的所有文件和文件夹路径例子(简单实用)
2014/05/10 PHP
如何通过View::first使用Laravel Blade的动态模板详解
2017/09/21 PHP
PHP在同一域名下两个不同的项目做独立登录机制详解
2017/09/22 PHP
php array_chunk()函数用法与注意事项
2019/07/12 PHP
ImageFlow可鼠标控制图片滚动
2008/01/30 Javascript
一个js写的日历(代码部分网摘)
2009/09/20 Javascript
jquery 读取页面load get post ajax 四种方式代码写法
2011/04/02 Javascript
javascript仿qq界面的折叠菜单实现代码
2012/12/12 Javascript
客户端js性能优化小技巧整理
2013/11/05 Javascript
简介JavaScript中toTimeString()方法的使用
2015/06/12 Javascript
javascript日期比较方法实例分析
2016/06/17 Javascript
js实时获取窗口大小变化的实例代码
2016/11/18 Javascript
AngularJS的Filter的示例详解
2017/03/07 Javascript
JS之if语句对接事件动作逻辑(详解)
2017/06/28 Javascript
解决vue-cli项目打包出现空白页和路径错误的问题
2018/09/04 Javascript
详解Eslint 配置及规则说明
2018/09/10 Javascript
flexible.js实现移动端rem适配方案
2020/04/07 Javascript
Electron实现应用打包、自动升级过程解析
2020/07/07 Javascript
Python 异常处理实例详解
2014/03/12 Python
Python之父谈Python的未来形式
2016/07/01 Python
Python正则表达式指南 推荐
2018/10/09 Python
Python进阶之全面解读高级特性之切片
2019/02/19 Python
python+webdriver自动化环境搭建步骤详解
2019/06/03 Python
Python如何在windows环境安装pip及rarfile
2020/06/15 Python
Python调用百度OCR实现图片文字识别的示例代码
2020/07/17 Python
中国最大的团购网站:聚划算
2016/09/21 全球购物
Larsson & Jennings官网:现代瑞士钟表匠
2018/03/20 全球购物
英国独特家具和家庭用品购物网站:Cuckooland
2020/08/30 全球购物
机房搬迁方案
2014/05/01 职场文书
篮球赛口号
2014/06/18 职场文书
教师自我剖析材料(群众路线)
2014/09/29 职场文书
2014年药剂科工作总结
2014/11/26 职场文书
初中教师德育工作总结2015
2015/05/12 职场文书
ElementUI实现el-form表单重置功能按钮
2021/07/21 Javascript