python命令行解析工具,argparse,它是python标准库中推荐使用的编写命令行程序的工具。
基本概念
我们通过一个常见的ls命令来展示argparse的功能。
从以上的命令中,我们能够了解一下几个基本概念:
- ls命令在没有参数的情况下也是可以运行的,默认打印出当前目录下的所有内容。
- 我们想要显示一个不同的目录mnist-data。我们所做的就是明确了常见的定位参数(positional argument),这样命名是因为需要程序根据参数在命令行中的位置而决定做什么。这个概念与命令cp更为接近,它的用法是cp src dest,src 表示的是你想要拷贝的文件,dest表示你想要将文件拷贝到哪里。
- 现在,我想要改变程序的行为。我想显示文件的详细信息而不仅仅是文件名,参数 -l 则是我们所知道的可选参数(optional argument)
- 最后一句话是显示帮助文档的一个片段,当你遇到你从未使用过的命令时,你可以通过它学习怎么使用。
基本认识
我们从一个基本程序开始(它什么也不做)
#!/user/bin/env python
# coding=utf-8
import argparse
parser=argparse.ArgumentParser()
parser.parse_args()
结果分析:
- 若不给参数而运行这个程序,将不会得到任何结果。
- 第二条命令显示了使用argparse的好处,你什么也没做,却得到了一个很好的帮助信息
位置参数
#!/user/bin/env python
# coding=utf-8
import argparse
parser=argparse.ArgumentParser()
parser.add_argument("echo")
args=parser.parse_args()
print args.echo
结果分析:
- 这次,我们增加了一个add_argument()方法,用来设置程序可接受的命令行参数。
- parse_args()方法实际上从我们的命令行参数中返回了一些数据,在上面的例子中是echo
尽管自动产生的帮助信息展示地很美观,但是我们仍然无法只根据echo 这个参数知道它是做什么的。所以,我们增加了一些东西,使它变得更有用。
#!/user/bin/env python
# coding=utf-8
import argparse
parser=argparse.ArgumentParser()
parser.add_argument("echo",help="echo the string you use here")
args=parser.parse_args()
print args.echo
在此基础上,我们再多改变一点:(计算输入参数square的平方)
#!/user/bin/env python
# coding=utf-8
import argparse
parser=argparse.ArgumentParser()
parser.add_argument("square",help="display a square of a given number")
args=parser.parse_args()
print args.square**2
这个程序并不能正确运行,因为argparse会将输入当字符串处理,所以我们需要设置它的类型:(type=int)
import argparse
parser=argparse.ArgumentParser()
parser.add_argument("square",help="display a square of a given number",type=int)
args=parser.parse_args()
print args.square**2
输出结果如下:
- add_argument()方法,用来设置可接受的命令行参数。现在要运行函数就必须输入一个参数。
- parse_args()方法实际上从我们的命令行中返回了一些数据。
- argparse默认接受到的参数按字符串处理,所以我们需要设置它的类型(type=int)
#!/user/bin/env python
# coding=utf-8
import argparse
p=argparse.ArgumentParser()
p.add_argument('--one',default=1,type=int, help='the first argument')
p.add_argument('--two',default=2,type=int, help='the second argument')
p.add_argument('--docs-dir',default="./", help='document directory')
args=p.parse_args()
#可以打印出来查看
print args
#打印某一个参数
print args.one
print args.docs_dir #经过parse_args()函数后参数名称去掉了前面的"--",所有的"-"转换为"_"
带参数运行程序
如果运行时带了一个不认识的参数,就会报错。
有时我们不希望这样,我们的需求是:只提取有用的参数,不认识的参数丢弃但并不需要报错
#!/user/bin/env python
# coding=utf-8
import sys
import argparse
p=argparse.ArgumentParser()
p.add_argument('--one',default=1,type=int, help='the first argument')
p.add_argument('--two',default=2,type=int, help='the second argument')
p.add_argument('--docs-dir',default="./", help='document directory')
#这个函数将认识的和不认识的参数分开放进2个变量中
args, remaining=p.parse_known_args(sys.argv)
#可以打印出来查看
print args
print remaining