Python Argparse模塊學習 2016-03-28

最近是打算寫個好用的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.yaoqianglawyer.com
www.yaoqianglawyer.com

如果沒有帶參數,則返回:

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!

大概就學習到這里,基本上常用的已經介紹了,其他少用的可以去看官方文檔。

參考

一级A片不卡在线观看