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对小数进行除法运算的正确方法示例
Aug 25 Python
Python生成随机密码
Mar 10 Python
Python判断文件或文件夹是否存在的三种方法
Jul 27 Python
TensorFlow Session会话控制&amp;Variable变量详解
Jul 30 Python
Python找出微信上删除你好友的人脚本写法
Nov 01 Python
Python设计模式之策略模式实例详解
Jan 21 Python
用Python配平化学方程式的方法
Jul 20 Python
Python使用APScheduler实现定时任务过程解析
Sep 11 Python
python解析命令行参数的三种方法详解
Nov 29 Python
Anaconda+vscode+pytorch环境搭建过程详解
May 25 Python
Python爬虫requests库多种用法实例
May 28 Python
使用Keras实现Tensor的相乘和相加代码
Jun 18 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
特详细的PHPMYADMIN简明安装教程
2008/08/01 PHP
探讨php中遍历二维数组的几种方法详解
2013/06/08 PHP
ThinkPHP使用心得分享-ThinkPHP + Ajax 实现2级联动下拉菜单
2014/05/15 PHP
图解找出PHP配置文件php.ini的路径的方法
2014/08/20 PHP
PHP使用mysql_fetch_object从查询结果中获取对象集的方法
2015/03/18 PHP
php基于SQLite实现的分页功能示例
2017/06/21 PHP
区分JS中的undefined,null,&quot;&quot;,0和false
2007/03/08 Javascript
jquery pagination插件实现无刷新分页代码
2009/10/13 Javascript
JavaScript将相对地址转换为绝对地址示例代码
2013/07/19 Javascript
jQuery实现点击该行即可删除HTML表格行
2014/10/17 Javascript
JavaScript+canvas实现七色板效果实例
2016/02/18 Javascript
新手学习前端之js模仿淘宝主页网站
2016/10/31 Javascript
Vue.js结合bootstrap实现分页控件
2017/03/10 Javascript
JavaScript 巧学巧用
2017/05/23 Javascript
详解nodejs模板引擎制作
2017/06/14 NodeJs
基于JavaScript实现无缝滚动效果
2017/07/21 Javascript
基于js中document.cookie全面解析
2017/09/14 Javascript
基于vue2的canvas时钟倒计时组件步骤解析
2018/11/05 Javascript
vue项目中使用fetch的实现方法
2019/04/25 Javascript
微信小程序全局变量的设置、使用、修改过程解析
2019/09/24 Javascript
jquery 遍历hash操作示例【基于ajax交互】
2019/10/12 jQuery
Python爬取qq music中的音乐url及批量下载
2017/03/23 Python
python爬虫之百度API调用方法
2017/06/11 Python
Pycharm代码无法复制,无法选中删除,无法编辑的解决方法
2018/10/22 Python
python实现连续图文识别
2018/12/18 Python
对python中xlsx,csv以及json文件的相互转化方法详解
2018/12/25 Python
Python3实现定时任务的四种方式
2019/06/03 Python
Python爬虫实现“盗取”微信好友信息的方法分析
2019/09/16 Python
python 使用opencv 把视频分割成图片示例
2019/12/12 Python
QML用PathView实现轮播图
2020/06/03 Python
Python 使用Opencv实现目标检测与识别的示例代码
2020/09/08 Python
世界第一冲浪品牌:O’Neill
2016/08/30 全球购物
税务会计岗位职责
2014/02/18 职场文书
秋季运动会广播稿
2014/02/22 职场文书
MySQL数据库超时设置配置的方法实例
2021/10/15 MySQL
python 判断文件或文件夹是否存在
2022/03/18 Python