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中的数据类型
May 05 Python
Python 详解基本语法_函数_返回值
Jan 22 Python
Python中表达式x += y和x = x+y 的区别详解
Jun 20 Python
python3利用smtplib通过qq邮箱发送邮件方法示例
Dec 03 Python
Python编写Windows Service服务程序
Jan 04 Python
python实现外卖信息管理系统
Jan 11 Python
python使用Plotly绘图工具绘制气泡图
Apr 01 Python
python 利用pywifi模块实现连接网络破解wifi密码实时监控网络
Sep 16 Python
解决Python命令行下退格,删除,方向键乱码(亲测有效)
Jan 16 Python
Python3中configparser模块读写ini文件并解析配置的用法详解
Feb 18 Python
通过实例简单了解Python sys.argv[]使用方法
Aug 04 Python
python中的列表和元组区别分析
Dec 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
php中的MVC模式运用技巧
2007/05/03 PHP
PHP截取汉字乱码问题解决方法mb_substr函数的应用
2008/03/30 PHP
php 删除记录同时删除图片文件的实现代码
2010/05/12 PHP
PHP 自定义错误处理函数的使用详解
2013/05/10 PHP
php设计模式之单例模式使用示例
2014/01/20 PHP
PHP清除字符串中所有无用标签的方法
2014/12/01 PHP
php计算到指定日期还有多少天的方法
2015/04/14 PHP
PHP中的一些常用函数收集
2015/05/26 PHP
FLASH 广告之外的链接
2008/12/16 Javascript
关于Aptana Studio生成自动备份文件的解决办法
2009/12/23 Javascript
15 个 JavaScript Web UI 库
2010/05/19 Javascript
Jquery练习之表单验证实现代码
2010/12/14 Javascript
浅析Javascript使用include/require
2013/11/13 Javascript
jQuery简单实现网页选项卡特效
2014/11/24 Javascript
XML文件转化成NSData对象的方法
2015/08/12 Javascript
window.location.hash知识汇总
2015/11/09 Javascript
JavaScript、tab切换完整版(自动切换、鼠标移入停止、移开运行)
2016/01/05 Javascript
ionic实现带字的toggle滑动组件
2016/08/27 Javascript
D3.js实现直方图的方法详解
2016/09/25 Javascript
AngularJs 利用百度地图API 定位当前位置 获取地址信息
2017/01/18 Javascript
NodeJS遍历文件生产文件列表功能示例
2017/01/22 NodeJs
js图片放大镜实例讲解(必看篇)
2017/07/17 Javascript
微信小程序中的canvas 文字断行和省略号显示功能的处理方法
2018/11/14 Javascript
JavaScript中常用的3种弹出提示框(alert、confirm、prompt)
2020/11/10 Javascript
Python中使用glob和rmtree删除目录子目录及所有文件的例子
2014/11/21 Python
巧用python和libnmapd,提取Nmap扫描结果
2016/08/23 Python
Python通过调用mysql存储过程实现更新数据功能示例
2018/04/03 Python
基于DataFrame改变列类型的方法
2018/07/25 Python
tensorflow 恢复指定层与不同层指定不同学习率的方法
2018/07/26 Python
详解Anaconda 的安装教程
2020/09/23 Python
HTML5 直播疯狂点赞动画实现代码 附源码
2020/04/14 HTML / CSS
数控专业大学生的自我鉴定
2013/11/13 职场文书
写求职信有什么意义
2014/02/17 职场文书
学校机关党总支领导班子整改工作方案
2014/10/26 职场文书
安全第一课观后感
2015/06/18 职场文书
python元组打包和解包过程详解
2021/08/02 Python