Python Argparse模块学习 2016-03-28 #python #argparse
最近是打算写个好用的webdirscan
,毕竟现成的没找到几个好用的
所以发挥麒麟臂,自己写一套适合自己以及自己喜欢的web目录扫描工具,
也就当是巩固Python基础的一个过程。
前言
首先考虑到要做webdirscan
就必须传入主机、字典、脚本语言等,所以就涉及到了命令行传入参数的问题,于是看了看其他的脚本都是如何接收参数,调用参数,我这里看的是lijiejie
的子域名爆破工具,里面import了argparse
模块,所以就去官方找了文档,这里对文档进行简单的翻译和理解。
没有接收参数(–help除外)
#!/usr/bin/env python
# coding:utf-8
import argparse
parse = argparse.ArgumentParser()
args = parse.parse_args()
接收必须参数
简单接收一个参数
举个栗子,接收一个host参数并输出:
#!/usr/bin/env python
# coding:utf-8
import argparse
parse = argparse.ArgumentParser()
parse.add_argument('host')
args = parse.parse_args()
print args.host
结果如下:
striker@Striker-Ubuntu:~/Desktop/PythonStudy$ ./argparseStudy.py www.hackersb.cn
www.hackersb.cn
如果没有带参数,则返回:
striker@Striker-Ubuntu:~/Desktop/PythonStudy$ ./argparseStudy.py
usage: argparseStudy.py [-h] host
argparseStudy.py: error: too few arguments
给接收的参数添加帮助文字
举个例子,给上文的host添加帮助文字:
#!/usr/bin/env python
# coding:utf-8
import argparse
parse = argparse.ArgumentParser()
parse.add_argument('host',help="This is host for scan.")
args = parse.parse_args()
print args.host
这个时候执行argparseStudy.py -h会返回:
striker@Striker-Ubuntu:~/Desktop/PythonStudy$ ./argparseStudy.py -h
usage: argparseStudy.py [-h] host
positional arguments:
host This is host for scan.
optional arguments:
-h, --help show this help message and exit
设置接收参数的类型
这里以int型为例,当然也有string类型,这里还支持什么类型,我不知道.. 反正常用的就int和string吧…
#!/usr/bin/env python
# coding:utf-8
import argparse
parse = argparse.ArgumentParser()
parse.add_argument('host',help="This is host for scan.",type=int)
args = parse.parse_args()
print args.host
以下是我输入string类型和int类型的返回结果:
striker@Striker-Ubuntu:~/Desktop/PythonStudy$ ./argparseStudy.py aaa
usage: argparseStudy.py [-h] host
argparseStudy.py: error: argument host: invalid int value: 'aaa'
striker@Striker-Ubuntu:~/Desktop/PythonStudy$ ./argparseStudy.py 123
123
输入aaa的时候因为不是int型,所以报错~
接收可选参数
接收需要传值的可选参数
比如做webdirscan需要输入文件后缀,如:php、jsp、aspx、asp,但这个参数是可选的:
#!/usr/bin/env python
# coding:utf-8
import argparse
parse = argparse.ArgumentParser()
parse.add_argument('--suffix',help="This is suffix on scan file")
args = parse.parse_args()
if args.suffix:
print args.suffix
以下是我可选参数的传入方式、并且不传该参数也不会报错~ 毕竟是可选参数:
striker@Striker-Ubuntu:~/Desktop/PythonStudy$ ./argparseStudy.py --suffix php
php
striker@Striker-Ubuntu:~/Desktop/PythonStudy$ ./argparseStudy.py
接收无需传值的可选参数
比如我们做webdirscan的时候,如果传入--thread
就启用多线程,不传入则单线程:
#!/usr/bin/env python
# coding:utf-8
import argparse
parse = argparse.ArgumentParser()
parse.add_argument('--thread',help="open the more thread",action="store_true")
args = parse.parse_args()
if args.thread:
print ‘more thread!’
返回结果如下,如果我带上--thread
则输出多线程:
striker@Striker-Ubuntu:~/Desktop/PythonStudy$ ./argparseStudy.py
striker@Striker-Ubuntu:~/Desktop/PythonStudy$ ./argparseStudy.py --thread
more thread!
短配置
缩短我们的参数,很多程序中都用单个字母代替,比如nmap的-port
简写为-p
,我们也可以这样:
#!/usr/bin/env python
# coding:utf-8
import argparse
parse = argparse.ArgumentParser()
parse.add_argument('-t','--thread',help="open the more thread",action="store_true")
args = parse.parse_args()
if args.thread:
print ‘more thread!’
运行结果如下:
striker@Striker-Ubuntu:~/Desktop/PythonStudy$ ./argparseStudy.py
striker@Striker-Ubuntu:~/Desktop/PythonStudy$ ./argparseStudy.py -t
more thread!
大概就学习到这里,基本上常用的已经介绍了,其他少用的可以去看官方文档。