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 相关文章推荐
Python3.0与2.X版本的区别实例分析
Aug 25 Python
python中列表元素连接方法join用法实例
Apr 07 Python
Python的Django框架使用入门指引
Apr 15 Python
python协程用法实例分析
Jun 04 Python
python抓取网页中图片并保存到本地
Dec 01 Python
Python安装官方whl包和tar.gz包的方法(推荐)
Jun 04 Python
python中的json总结
Oct 11 Python
Python变量访问权限控制详解
Jun 29 Python
多版本python的pip 升级后, pip2 pip3 与python版本失配解决方法
Sep 11 Python
python IP地址转整数
Nov 20 Python
Python基于execjs运行js过程解析
Nov 27 Python
python热力图实现简单方法
Jan 29 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中的字符串函数
2006/11/24 PHP
php下正则来匹配dede模板标签的代码
2010/08/21 PHP
PHP常用的缓存技术汇总
2014/05/05 PHP
php实现session自定义会话处理器的方法
2015/01/27 PHP
PHP的pcntl多进程用法实例
2015/03/19 PHP
php获取访问者浏览页面的浏览器类型
2017/01/23 PHP
php文件后缀不强制为.php的实操方法
2019/09/18 PHP
javascript算法题 求任意一个1-9位不重复的N位数在该组合中的大小排列序号
2012/07/21 Javascript
javascript中打印当前的时间实现思路及代码
2013/12/18 Javascript
图片翻转效果具体实现代码
2014/01/09 Javascript
基于Vue.js的表格分页组件
2016/05/22 Javascript
Vue 2.0 服务端渲染入门介绍
2017/03/29 Javascript
深入浅析JSONAPI在PHP中的应用
2017/12/24 Javascript
如何从0开始用node写一个自己的命令行程序
2018/12/29 Javascript
JavaScript之实现一个简单的Vue示例
2019/01/17 Javascript
说说Vue.js中的functional函数化组件的使用
2019/02/12 Javascript
js刷新页面location.reload()用法详解
2019/12/09 Javascript
使用webpack搭建vue环境的教程详解
2019/12/31 Javascript
Node.js API详解之 assert模块用法实例分析
2020/05/26 Javascript
微信小程序canvas动态时钟
2020/10/22 Javascript
[07:57]DOTA2热力大趴狂欢夜 广州站活动回顾
2013/11/27 DOTA
Python numpy实现数组合并实例(vstack,hstack)
2018/01/09 Python
cmd运行python文件时对结果进行保存的方法
2018/05/16 Python
Python中的单行、多行、中文注释方法
2018/07/19 Python
Python实现的微信支付方式总结【三种方式】
2019/04/13 Python
如何表示python中的相对路径
2020/07/08 Python
详解Canvas事件绑定
2018/06/27 HTML / CSS
九年级数学教学反思
2014/02/02 职场文书
环保建议书400字
2014/05/14 职场文书
员工安全承诺书
2014/05/22 职场文书
教师求职简历自我评价
2015/03/10 职场文书
公司放假通知怎么写
2015/04/15 职场文书
Windows10下安装MySQL8
2021/04/06 MySQL
Python 读写 Matlab Mat 格式数据的操作
2021/05/19 Python
Win2008系统搭建DHCP服务器
2022/06/25 Servers
TypeScript实用技巧 Nominal Typing名义类型详解
2022/09/23 Javascript