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编码问题汇总
Sep 06 Python
Python的爬虫框架scrapy用21行代码写一个爬虫
Apr 24 Python
Python PyQt4实现QQ抽屉效果
Apr 20 Python
pycharm下查看python的变量类型和变量内容的方法
Jun 26 Python
Python实现带参数的用户验证功能装饰器示例
Dec 14 Python
ActiveMQ:使用Python访问ActiveMQ的方法
Jan 30 Python
解决django前后端分离csrf验证的问题
Feb 03 Python
python 实现矩阵填充0的例子
Nov 29 Python
在Python中利用pickle保存变量的实例
Dec 30 Python
Python集合操作方法详解
Feb 09 Python
Spring Boot中使用IntelliJ IDEA插件EasyCode一键生成代码详细方法
Mar 20 Python
Python 中的 copy()和deepcopy()
Nov 07 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
php5 图片验证码实现代码
2009/12/11 PHP
PHP之COOKIE支持详解
2010/09/20 PHP
PHP页面实现定时跳转的方法
2014/10/31 PHP
使用vs code编辑调试php配置的方法
2019/01/29 PHP
php和js实现根据子网掩码和ip计算子网功能示例
2019/11/09 PHP
解决windows上php xdebug 无法调试的问题
2020/02/19 PHP
JQuery1.6 使用方法三
2011/11/23 Javascript
Javascript面向对象扩展库代码分享
2012/03/27 Javascript
js 立即调用的函数表达式如何写
2014/01/12 Javascript
javascript原生和jquery库实现iframe自适应高度和宽度
2014/07/18 Javascript
JavaScript学习笔记之内置对象
2015/01/22 Javascript
使用jQueryMobile实现滑动翻页效果的方法
2015/02/04 Javascript
javascript中this的四种用法
2015/05/11 Javascript
详解javascript遍历方式
2015/11/11 Javascript
JS如何判断是否为ie浏览器的方法(包括IE10、IE11在内)
2015/12/13 Javascript
jQuery的层级查找方式分析
2016/06/16 Javascript
JS比较两个数值的大小实例
2016/11/25 Javascript
让nodeJS支持ES6的词法----babel的安装和使用方法
2017/07/31 NodeJs
在Debian(Raspberry Pi)树莓派上安装NodeJS的教程详解
2017/09/19 NodeJs
JS实现的简单分页功能示例
2018/08/23 Javascript
微信小程序 wepy框架与iview-weapp的用法详解
2019/04/10 Javascript
Vue简单封装axios之解决post请求后端接收不到参数问题
2020/02/16 Javascript
[12:29]《一刀刀一天》之DOTA全时刻19:蝙蝠骑士田伯光再度不举
2014/06/10 DOTA
Python写的Socks5协议代理服务器
2014/08/06 Python
Pyhton中防止SQL注入的方法
2015/02/05 Python
使用python-pptx包批量修改ppt格式的实现
2020/02/14 Python
python实现每天自动签到领积分的示例代码
2020/08/18 Python
兰芝美国网上商城:购买LANEIGE睡眠面膜等
2017/06/30 全球购物
美国最大的无人机经销商:DroneNerds
2018/03/20 全球购物
房地产融资计划书
2014/01/10 职场文书
《少年王勃》教学反思
2014/04/27 职场文书
班子个人四风问题整改措施
2014/10/04 职场文书
成绩报告单家长评语
2014/12/30 职场文书
2016学校先进党组织事迹材料
2016/02/29 职场文书
Python趣味挑战之给幼儿园弟弟生成1000道算术题
2021/05/28 Python
centos7安装mysql5.7经验记录
2022/05/02 Servers