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之关于循环的小伎俩
Oct 02 Python
Python类的定义、继承及类对象使用方法简明教程
May 08 Python
Python编程把二叉树打印成多行代码
Jan 04 Python
使用Selenium破解新浪微博的四宫格验证码
Oct 19 Python
django模板加载静态文件的方法步骤
Mar 01 Python
Django models.py应用实现过程详解
Jul 29 Python
Python numpy数组转置与轴变换
Nov 15 Python
浅谈ROC曲线的最佳阈值如何选取
Feb 28 Python
使用python从三个角度解决josephus问题的方法
Mar 27 Python
学会python自动收发邮件 代替你问候女友
May 20 Python
Python抖音快手代码舞(字符舞)的实现方法
Feb 07 Python
python疲劳驾驶困倦低头检测功能的实现
Apr 04 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
百事可乐也出咖啡了 双倍咖啡因双倍快乐
2021/03/03 咖啡文化
深入了解php4(2)--重访过去
2006/10/09 PHP
深入PHP数据缓存的使用说明
2013/05/10 PHP
微信支付开发动态链接Native支付
2016/07/12 PHP
PHP 使用位运算实现四则运算的代码
2021/03/09 PHP
javascript基础知识大全 便于大家学习,也便于我自己查看
2012/08/17 Javascript
JavaScript动态添加style节点的方法
2015/06/09 Javascript
JS随机调用指定函数的方法
2015/07/01 Javascript
数据分析软件之FineReport教程:[5]参数界面JS(全)
2015/08/13 Javascript
jQuery+CSS3实现3D立方体旋转效果
2015/11/10 Javascript
jQuery判断元素是否显示 是否隐藏的简单实现代码
2016/05/19 Javascript
纯js封装的ajax功能函数与用法示例
2018/05/14 Javascript
vue路由守卫+登录态管理实例分析
2019/05/21 Javascript
vue ssr服务端渲染(小白解惑)
2019/11/10 Javascript
vue实例的选项总结
2020/06/09 Javascript
[06:07]辉夜杯现场观众互动 “比谁远送显示器”
2015/12/26 DOTA
[45:25]OG vs EG 2019国际邀请赛淘汰赛 胜者组 BO3 第一场 8.22
2019/09/05 DOTA
python元组操作实例解析
2014/09/23 Python
Python字符串特性及常用字符串方法的简单笔记
2016/01/04 Python
浅谈Python的异常处理
2016/06/19 Python
python实现跨excel的工作表sheet之间的复制方法
2018/05/03 Python
Python实现朴素贝叶斯分类器的方法详解
2018/07/04 Python
pip安装py_zipkin时提示的SSL问题对应
2018/12/29 Python
Python从函数参数类型引出元组实例分析
2019/05/28 Python
pandas 缺失值与空值处理的实现方法
2019/10/12 Python
Python urllib库如何添加headers过程解析
2020/10/05 Python
CSS3弹性盒模型开发笔记(一)
2016/04/26 HTML / CSS
历史学专业个人的自我评价
2013/10/13 职场文书
工商管理系学生的自我评价分享
2013/11/29 职场文书
幼儿园门卫岗位职责
2014/02/14 职场文书
硕士学位申请报告
2015/05/15 职场文书
战友聚会致辞
2015/07/28 职场文书
演讲稿:​快乐,从不抱怨开始!
2019/04/02 职场文书
CSS 新特性 contain控制页面的重绘与重排问题
2021/04/30 HTML / CSS
centos7安装mysql5.7经验记录
2022/05/02 Servers