argparse模块_python模块之optparse/argparse

点击上方蓝色字关注我!

不让古人,是谓有志。不让今人,是谓无良。

俗话说的好

前言

65ba2189cc5aabd4de64e86901ff3b3b.png 36bd37574440dc7d3084f9c225731e82.png

猪头:哥,我看 sqlmap ,nmap 等神器都是可以在命令行直接带参数,像我这种脚本小子就只会用 input 弹出一条提示信息来接收输入,好 low 啊。

b8007a8853d4438295ef47c354b3176e.png

匠:咳咳嗯~ 其实吧,你和大神只差一个模块的距离,学会了它,你也可以装装逼。

猪头:真的吗?!!啥模块?教我,哥,我也要像黑客一样活着。。。

79e6e6183f3a885e40f43839963f2fc0.png

匠:那就是 optparse 模块和 argparse 模块,不过,optparse模块在2.7版本后将被弃用也不会得到更新,会使用argparse模块来替代。具体实现且听我细细讲来。

f9f9ffc300ce7a79ca5a0ebb414d31d7.png

optparse 模块

65ba2189cc5aabd4de64e86901ff3b3b.png 36bd37574440dc7d3084f9c225731e82.png
1 基本框架
import optparsedef main():    parser = optparse.OptionParser()    parser.usage = 'python3 optparse - argparse -h host -p port'    parser.add_option('-H',dest='tgthost',type='string',help='specify target host') # 注意这里使用 -H 来指明导入主机,因为 -h 是约定俗成的查看帮助作用,    parser.add_option('-p',dest='tgtport',type='int',help='specify target port')    (options,args) = parser.parse_args()    if options.tgthost == None or options.tgtport == None:        print(parser.usage)        exit(0)    else:        tgthost = options.tgthost        tgtport = options.tgtport        print('主机是:' + tgthost)        print('端口是:' + str(tgtport))if __name__ == '__main__':    main()
~$> python3 optparse模块使用.py -H zhutou.com -p 21 22主机是:zhutou.com端口是:21

以上的程序有个缺点,就是不能接收多个参数,比如不能接收多个主机或多个端口,于是使用 append() 方法来扩容。

2append扩容之后
import optparsedef main():    parser = optparse.OptionParser()    parser.usage = 'python3 optparse - argparse -h host -p port'    parser.add_option('-H',dest='tgthost',type='string',help='specify target host') # 注意这里使用 -H 来指明导入主机,因为 -h 是约定俗成的查看帮助作用,    parser.add_option('-p',dest='tgtport',type='int',help='specify target port')    (options,args) = parser.parse_args()    tgthost = options.tgthost    tgtport = options.tgtport    args.append(tgtport)    if tgthost == None or tgtport == None:        print(parser.usage)        exit(0)    else:        print('主机是:' + tgthost)        print('端口是:' ,end='')        for port in args:            print(str(port) + ' ',end='')if __name__ == '__main__':    main()
~$> python optparse模块使用.py -H zhutou.com -p 22 21 25 443 445 3306主机是:zhutou.com端口是:21 25 443 445 3306 22

argparse 模块

65ba2189cc5aabd4de64e86901ff3b3b.png 36bd37574440dc7d3084f9c225731e82.png

argparse 模块使得创建一个用户友好的命令行接口更加容易,程序定义了它需要的参数,同时 argparse 模块将知道如何解析 sys.argv之外的参数。argparse 模块还会自动地生成 help 和 usage 信息,并在用户输入不合理的参数之后会发出错误。

之前说过,了解一个模块最好的办法就是看官方文档,argparse模块的官方文档链接如下:

https://docs.python.org/3/howto/argparse.html#id1
1 基本框架
import argparsedef main():    parse = argparse.ArgumentParser(description='demo of argparse')    parse.add_argument('-H', '--host', dest='hostname',                       help='hostname is need')  # 这里要注意不能是 -h ,这样就和显示帮助信息的 -h 重复了    parse.add_argument('-p', '--port', dest='ports', help='ports are need')    args = parse.parse_args()    if args.hostname == None or args.ports == None:        print(parse.usage)        exit(0)    else:        hostname = args.hostname        ports = args.ports        print('scan {} : {}'.format(hostname, ports))if __name__ == '__main__':    main()
C:\Users\Lin\Desktop>python3 tmp.py -husage: tmp.py [-h] [-H HOSTNAME] [-p PORTS [PORTS ...]]demo of argparseoptional arguments:  -h, --help            show this help message and exit  -H HOSTNAME, --host HOSTNAME                        hostname is need  -p PORTS [PORTS ...], --port PORTS [PORTS ...]                        ports are needC:\Users\Lin\Desktop>python3 tmp.py -H hunter.com -p 21scan hunter.com : 21
2 default

default 表示命令行没有设置该参数的时候,程序默认使用 default 指定的值代替。

parser.add_argument('-n',default='zhutou')
3 required

如果设置了 required=True,则在实际运行的时候不设置该参数将报错。

parser.add_argument('-n',required=True)
4 type

默认的参数类型是 str 类型,可以设置成整型/布尔型:type=int 或 type=bool

parser.add_argument('-n',type=int)parser.add_argument('-n',type=bool)
5 choices

参数值只能从几个选项里面选择。

parser.add_argument('-n',choices=['zhutou1','zhutou2','zhutou3'])
6 help

指定参数说明的信息。

7 dest

设置参数在代码中的变量名,如果通过 dest=xxx 设置了参数的变量名,那么在代码中使用 args.xxx 来获取参数值。

8 nargs

设置了参数可以接收多少个参数。

parser.add_argument('-n',nargs='')
nargs 值含义
N参数的绝对个数(例如:3)
'?'0或1个参数
'*'0或所有参数
'+'所有,并且至少一个参数

尾声

65ba2189cc5aabd4de64e86901ff3b3b.png 36bd37574440dc7d3084f9c225731e82.png

我是匠心,一个在清流旁默默磨剑的匠人,期待那一天能利刃出鞘,仗剑走江湖。

c0141af5b9f443d8fa1e3c82d838652b.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值