Python笔记:命令行参数解析

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python笔记:命令行参数解析相关的知识,希望对你有一定的参考价值。

参考技术A

有些时候我们需要通过命令行将参数传递给脚本,C语言中有个getopt()方法,python中也有个类似的命令行参数解析方法getopt()。python也提供了比getopt()更简洁的argparse方法。另外,sys模块也可以实现简单的参数解析,本文将对这3种命令行参数解析方法简要介绍。

sys.argv是传入的参数列表,sys.argv[0]是当前python脚本的名称,sys.argv[1]表示第一个参数,以此类推。

命令行运行:

可以看到传入的参数通过sys.argv来获取,它就是一个参数列表。

python的getopt与C语言的的getopt()函数类似。相比于sys模块,支持长参数和短参数,并对参数解析赋值。但它需要结合sys模块进行参数解析,语法格式如下:

短参数为单个英文字母,如果必须赋值需要在后面加英文冒号( : ),长参数一般为字符串(相比短参数,更能说明参数含义),如果必须赋值需要在后面加等号( = )。

命令行运行:

注意:短参数(options)和长参数(long_options)不需要一一对应,可以任意顺序,也可以只有短参数或者只有长参数。

argparse模块提供了很多可以设置的参数,例如参数的默认值,帮助消息,参数的数据类型等。argparse类主要包括ArgumentParser、add_argument和parse_args三个方法。

下面介绍这三个函数的使用方法。

argparse默认提供了 -h | --help 参数:

命令行运行:

下面列出部分参数:

下面来添加参数:

命令行运行:

parse_args() 方法用于解析参数,在前面的示例代码中使用parse_args方法来提取参数值,对于无效或者错误的参数会打印错误信息和帮助信息:

命令行运行:

本文介绍了Python的三种命令行参数解析方法sys.argv、getopt和argparse,可以根据自己的需要进行选择,getopt和argparse两种方法相比来说,建议选择argparse,代码量更少更简洁。更详细的使用方法参考官方文档:

--THE END--

python学习笔记14-optparse真正的命令行参数

真正的命令行参数

-c/--chars:命令行选项

dest:为选项定义变量名,值characters就是’-c’选项的名字

default=False:characters的值False,意思是默认情况下命令不带-c选项

help:选项的解释说明部分


[[email protected] wc]# vim 9_optparse.py 

#!/usr/bin/env python
import sys, os
from optparse import OptionParser

parser = OptionParser()
parser.add_option("-c", "--char",
                  dest="chars",
                  action="store_true",
                  default=False,
                  help="only count chars")

parser.add_option("-w", "--word",
                  dest="words",
                  action="store_true",
                  default=False,
                  help="only count words")

parser.add_option("-l", "--line",
                  dest="lines",
                  action="store_true",
                  default=False,
                  help="only count lines")


options, args = parser.parse_args()
print options, args

data = sys.stdin.read()
chars = len(data)
words = len(data.split())
lines = data.count(‘\n‘)

if options.chars:
    print chars,
if options.words:
    print words,
if options.lines:
    print lines
    
[[email protected] wc]# cat /etc/hosts |  python 9_optparse.py -c
{‘chars‘: True, ‘lines‘: False, ‘words‘: False} []
1534
[[email protected] wc]# cat /etc/hosts |  python 9_optparse.py -c -w
{‘chars‘: True, ‘lines‘: False, ‘words‘: True} []
1534 74
[[email protected] wc]# cat /etc/hosts |  python 9_optparse.py -c -w -l
{‘chars‘: True, ‘lines‘: True, ‘words‘: True} []
1534 74 19
[[email protected] wc]# cat /etc/hosts |  python 9_optparse.py 
{‘chars‘: False, ‘lines‘: False, ‘words‘: False} []


options和args理解?

parse_args()这个方法返回两个值,options和args,分别是对象和列表,options里包括所有使用parser.add_option()这个方法定义的选项,比如‘-w‘。
options.words就是存储‘-w‘这个选项的,它的值是True或者False,比如脚本后面带-w选项时,那么options.words的值就是True。
下面这个在ipython下的输出,由于没有使用add_option()定义任何选项,所以options的输出里没有选项的值。
这个是python自带的模块,想具体了解它的内部是如何实现的,源码文件在这个位置,/usr/lib64/python2.6/optparse.py。


脚本中这样定义的:dest = "characters",
后面应该这样判断:if options.characters,而不是if options.chars



dest和action有什么用?看Help似乎没怎么提到?

在代码里引用选项时需要dest后面定义的那个名字,比如引用-c选项,就使用options.characters,每个选项都需要dest去定义一个名字,这个值就是选项的名字,目的就是在程序中去引用这个选项,比如:if not (options.characters or options.words or options.lines):括号里就是在引用这些选项。
有的命令后面的选项就是一个字母,有的不仅有字母,而且后面还有值,比较一下下面这两个命令:
wc -l /etc/passwd
tail -n 20 /etc/passwd
-l与-n都是选项,但是行为不一样,-l后面没有值,-n后面有值,那么选项后面带不带值是action决定的,如果action="store_true",那么说明选项后面没有值,如果action=‘store‘,说明选项后面需要带值。
脚本后面跟-h时,可以看到help定义的内容。



那default又是有什么作用,为False和True分别表示什么?

拿-c选项举例子,
default如果为True,表示脚本后面如果不加-c选项,默认也是有-c的行为的。
default为False时,表示脚本后面不加-c选项,就没有-c的行为,比如wc -l /etc/hosts,没有-c选项,就说明不对字符统计,只对行数统计

本文出自 “梅花香自苦寒来!” 博客,请务必保留此出处http://daixuan.blog.51cto.com/5426657/1862613

以上是关于Python笔记:命令行参数解析的主要内容,如果未能解决你的问题,请参考以下文章

python 命令行参数解析学习

python解析传入的命令行参数 argv

27.Go 解析命令行参数

Python语言命令行参数解析接收参数执行脚本的三种方法

Python--命令行参数解析Demo

在命令行参数中解析 \ - python 2.7.3