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 相关文章推荐
PHP webshell检查工具 python实现代码
Sep 15 Python
在Python程序中实现分布式进程的教程
Apr 28 Python
Python实现带参数与不带参数的多重继承示例
Jan 30 Python
详解重置Django migration的常见方式
Feb 15 Python
python使用thrift教程的方法示例
Mar 21 Python
django 配置阿里云OSS存储media文件的例子
Aug 20 Python
python3实现用turtle模块画一棵随机樱花树
Nov 21 Python
django的模型类管理器——数据库操作的封装详解
Apr 01 Python
Python ArgumentParse的subparser用法说明
Apr 20 Python
Pytorch通过保存为ONNX模型转TensorRT5的实现
May 25 Python
详解Scrapy Redis入门实战
Nov 18 Python
关于Python OS模块常用文件/目录函数详解
Jul 01 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
使用zend studio for eclipse不能激活代码提示功能的解决办法
2009/10/11 PHP
php学习之 认清变量的作用范围
2010/01/26 PHP
PHP原生函数一定好吗?
2014/12/08 PHP
前端必学之PHP语法基础
2016/01/01 PHP
PHP5.5基于mysqli连接MySQL数据库和读取数据操作实例详解
2019/02/16 PHP
获取当前网页document.url location.href区别总结
2008/05/10 Javascript
一款Jquery 分页插件的改造方法(服务器端分页)
2011/07/11 Javascript
jQuery中bind与live的用法及区别小结
2014/01/27 Javascript
JS制作简单的三级联动
2015/03/18 Javascript
原生js实现类似弹窗抖动效果
2015/04/02 Javascript
JavaScript的instanceof运算符学习教程
2016/06/08 Javascript
JavaScript基础知识点归纳(推荐)
2016/07/09 Javascript
AngularJS中的缓存使用
2017/01/11 Javascript
微信小程序 详解页面跳转与返回并回传数据
2017/02/13 Javascript
Vue实现购物车功能
2017/04/27 Javascript
详解基于node的前端项目编译时内存溢出问题
2017/08/01 Javascript
JS获取字符对应的ASCII码实例
2017/09/10 Javascript
详解vue-cli之webpack3构建全面提速优化
2017/12/25 Javascript
在vue2.0中引用element-ui组件库的方法
2018/06/21 Javascript
微信小程序的部署方法步骤
2018/09/04 Javascript
小程序瀑布流组件实现翻页与图片懒加载
2020/05/19 Javascript
[02:25]DOTA2英雄基础教程 虚空假面
2014/01/02 DOTA
Python 2与Python 3版本和编码的对比
2017/02/14 Python
基于anaconda下强大的conda命令介绍
2018/06/11 Python
Python3.7 新特性之dataclass装饰器
2019/05/27 Python
Python利用sqlacodegen自动生成ORM实体类示例
2019/06/04 Python
pytorch 自定义参数不更新方式
2020/01/06 Python
python 解决flask 图片在线浏览或者直接下载的问题
2020/01/09 Python
python+selenium+PhantomJS抓取网页动态加载内容
2020/02/25 Python
Whittard官方海外旗舰店:英国百年茶叶品牌
2018/02/22 全球购物
3分钟英语演讲稿
2014/04/29 职场文书
安全目标责任书
2014/07/22 职场文书
明星员工获奖感言
2014/08/14 职场文书
如何让vue长列表快速加载
2021/03/29 Vue.js
python 实现定时任务的四种方式
2021/04/01 Python
Win11怎么启动任务管理器?Win11启动任务管理器的几种方法
2021/11/23 数码科技