python通过getopt模块如何获取执行的命令参数详解


Posted in Python onDecember 29, 2017

前言

python脚本和shell脚本一样可以获取命令行的参数,根据不同的参数,执行不同的逻辑处理。

通常我们可以通过getopt模块获得不同的执行命令和参数。下面话不多说了,来一起看看详细的介绍吧。

方法如下:

下面我通过新建一个test.py的脚本解释下这个模块的的使用

#!/usr/bin/python
# -*- coding: utf-8 -*-
import sys
import getopt
if __name__=='__main__':
 print sys.argv
 opts, args = getopt.getopt(sys.argv[1:], "ht:q:", ["url=",'out'])
 print opts
 print args

执行命令 :

./test3.py -t 20171010-20171011 -q 24 -h --url=https://www.baidu.com --out file1 file2

执行结果 :

['D:/GitReposity/hope_crontab_repo/sla_channel/test3.py', '-t', '20171010-20171011', '-q', '24', '-h', '--url=https://www.baidu.com', '--out', 'file1', 'file2']
[('-t', '20171010-20171011'), ('-q', '24'), ('-h', ''), ('--url', 'https://www.baidu.com'), ('--out', '')]
['file1', 'file2']

我们查看getopt模块的官方文档

def getopt(args, shortopts, longopts = [])

Parses command line options and parameter list. args is the
argument list to be parsed, without the leading reference to the
running program. Typically, this means "sys.argv[1:]". shortopts
is the string of option letters that the script wants to
recognize, with options that require an argument followed by a
colon (i.e., the same format that Unix getopt() uses). If
specified, longopts is a list of strings with the names of the
long options which should be supported. The leading '--'
characters should not be included in the option name. Options
which require an argument should be followed by an equal sign
('=').

The return value consists of two elements: the first is a list of
(option, value) pairs; the second is the list of program arguments
left after the option list was stripped (this is a trailing slice
of the first argument). Each option-and-value pair returned has
the option as its first element, prefixed with a hyphen (e.g.,
'-x'), and the option argument as its second element, or an empty
string if the option has no argument. The options occur in the
list in the same order in which they were found, thus allowing
multiple occurrences. Long and short options may be mixed.

可以发现getopt方法需要三个参数。

第一个参数是args是将要解析的命令行参数我们可以通过sys.argv获取执行的相关参数

['D:/GitReposity/hope_crontab_repo/sla_channel/test3.py', '-t', '20171010-20171011', '-q', '24', '-h', '--url=https://www.baidu.com']

可以看出参数列表的第一个值是脚本执行的完全路径名,剩余参数是以空格分割的命令行参数。为了获得有效参数,通常args参数的值取sys.argv[1:]

第二个参数是shortopts是短命令操作符,他的参数要包含命令行中以 -符号开头的参数,像上面的例子中qht都以为 -开头,所以qht是该脚本的短命令,短命令又是如何匹配参数的呢?可以看到例子中shotopts为 "ht:q:" ,这里用命令后面跟着 : 来申明这个命令是否需要参数,这里h不需要参数,t和q需要参数,而命令行中紧跟着t和q的参数即为他们的命令参数,即t的命令参数为 20171010-20171011 ,q的命令参数为 24 。

第三个参数是longopts,改参数是个数组, 表示长命令操作符集合。这个集合要包含命令行中以 -- 符号开头的参数,url和out都是长命令,当长命令后面以 = 结尾是表示他需要一个参数,比如"url=" ,他匹配命令行中的下一个参数https://www.baidu.com.

该方法返回两个数组元素。第一个返回值,是通过shortopts和longopts匹配的命令行和其参数的元祖。该例子的返回值为:

[('-t', '20171010-20171011'), ('-q', '24'), ('-h', ''), ('--url', 'https://www.baidu.com'), ('--out', '')]
['file1', 'file2']

第二个返回值是命令行中未被匹配到的参数,该例子的返回值为:

['file1', 'file2']

通过返回值我们就可以在自己的代码中,根据不同命令去设计不同的逻辑处理,相当丰富了脚本的可用性。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

Python 相关文章推荐
用pywin32实现windows模拟鼠标及键盘动作
Apr 22 Python
Python生成pdf文件的方法
Aug 04 Python
Python多进程机制实例详解
Jul 02 Python
python制作websocket服务器实例分享
Nov 20 Python
python实现FTP服务器服务的方法
Apr 11 Python
Python连接phoenix的方法示例
Sep 29 Python
使用pandas将numpy中的数组数据保存到csv文件的方法
Jun 14 Python
Python中的Socket 与 ScoketServer 通信及遇到问题解决方法
Apr 01 Python
Python实现的爬取百度贴吧图片功能完整示例
May 10 Python
pandas中的series数据类型详解
Jul 06 Python
Python实现bilibili时间长度查询的示例代码
Jan 14 Python
Django ValuesQuerySet转json方式
Mar 16 Python
基于并发服务器几种实现方法(总结)
Dec 29 #Python
Python matplotlib画图实例之绘制拥有彩条的图表
Dec 28 #Python
python操作列表的函数使用代码详解
Dec 28 #Python
Python读csv文件去掉一列后再写入新的文件实例
Dec 28 #Python
python3.6连接MySQL和表的创建与删除实例代码
Dec 28 #Python
python3使用scrapy生成csv文件代码示例
Dec 28 #Python
浅谈Scrapy框架普通反爬虫机制的应对策略
Dec 28 #Python
You might like
推荐几部必看的DC动画电影
2020/03/03 欧美动漫
phpmail类发送邮件函数代码
2012/02/20 PHP
PHP中使用FFMPEG获取视频缩略图和视频总时长实例
2014/05/04 PHP
PHP+MySQL统计该库中每个表的记录数并按递减顺序排列的方法
2016/02/15 PHP
PHP仿微信多图片预览上传实例代码
2016/09/13 PHP
javascript实现划词标记+划词搜索功能
2007/03/06 Javascript
document.designMode的功能与使用方法介绍
2007/11/22 Javascript
Jquery 点击按钮显示和隐藏层的代码
2011/07/25 Javascript
jQuery调用AJAX时Get和post公用的乱码解决方法实例说明
2013/06/04 Javascript
ExtJs纵坐标值重复问题的解决方法
2014/02/27 Javascript
Bootstrap3 datetimepicker控件使用实例
2016/12/13 Javascript
jquery实现input框获取焦点的简单实例
2017/01/26 Javascript
javascript中mouseenter与mouseover的异同
2017/06/06 Javascript
浅谈pc端rem字体设置的问题
2017/08/03 Javascript
利用纯js + transition动画实现移动端web轮播图详解
2017/09/10 Javascript
Vue服务器渲染Nuxt学习笔记
2018/01/31 Javascript
详解Angular5 路由传参的3种方法
2018/04/28 Javascript
微信小程序实现单选功能
2018/10/30 Javascript
BootStrap前端框架使用方法详解
2020/02/26 Javascript
解决vscode进行vue格式化,会自动补分号和双引号的问题
2020/10/26 Javascript
JavaScript实现网页tab栏效果制作
2020/11/20 Javascript
Python实现的简单发送邮件脚本分享
2014/11/07 Python
Python的Flask框架标配模板引擎Jinja2的使用教程
2016/07/12 Python
Python连接数据库学习之DB-API详解
2017/02/07 Python
python对象销毁实例(垃圾回收)
2020/01/16 Python
为什么相对PHP黑python的更少
2020/06/21 Python
python3让print输出不换行的方法
2020/08/24 Python
CSS3属性使网站设计增强同时不消弱可用性
2009/08/29 HTML / CSS
HTML5 贪吃蛇游戏实现思路及源代码
2013/09/03 HTML / CSS
Conforama西班牙:您的家具、装饰和电器商店
2020/02/21 全球购物
main 函数执行以前,还会执行什么代码
2013/04/17 面试题
自荐书格式
2013/12/01 职场文书
浅析Python中的套接字编程
2021/06/22 Python
python geopandas读取、创建shapefile文件的方法
2021/06/29 Python
Nginx 配置 HTTPS的详细过程
2022/05/30 Servers
JavaScript圣杯布局与双飞翼布局实现案例详解
2022/08/05 Javascript