Python命令行参数解析

Python命令行参数解析

Python命令行解析是指读取终端传入的参数

sys.argv属性

这个是sys库立面的一个属性,其用于接收传入程序的命令行参数。它是一个列表。也就是差不多下面这种类型

sqlmap.py -u http://www.baidu.com

那么sys.argv的值就是如下

['sqlmap.py','-u','http://www.baidu.com']

它的第一个参数是文件的路径。多个参数的话需要用空格隔开。一般sys.argv需要配合optparse模块使用。

可以通过以下代码试试,sys.argv的输出

import sys
argsa = sys.argv
print(argsa)

注意需要在终端里面输入

optparse模块

optparse,是一个更够让程序设计人员轻松设计出简单明了、易于使用、符合标准的Unix命令例程式的Python模块。生成使用方法和帮助信息。简单来说它是一个用于处理sys.argv传进来的信息的模块。比如我们经常运行脚本时,会查看帮助信息就用用到--help,那么这个就是由此模块处理的。

下面通过例子先来初步了解:

from optparse import OptionParser #optparse里面最主要的类就是OptionParser了

optParser = OptionParser() #创建一个对象

optParser.add_option('-f','--file',action = 'store',type = "string" ,dest = 'filename')


optParser.add_option("-v","--vison", action="store_false", dest="verbose",
                     default='hello',help="make lots of noise [default]")
#上面的就是最主要的操作,差不多是定义参数的信息 -v是参数简写 --vsion是全写 两种名字都是同一个东西

fakeArgs = ['-f','file.txt','-v','how are you', 'arg1', 'arg2']
#这个fakeArgs是模拟sys.argv

option , args = optParser.parse_args()
#上面这里没有传入任何参数是为了更好的演示

op , ar = optParser.parse_args(fakeArgs)
#这里传入了fakeArgs,其操作和上面的是一样的
#这里的op会返回一个类似字典的自定义类型option中的dest变量,而值则是我们自己传进去的

print("option : ",option)
print("args : ",args)
print("op : ",op)
print("ar : ",ar)

最后程序输出的结果如下

option :  {'filename': None, 'verbose': 'hello'}
args :  []
op :  {'filename': 'file.txt', 'verbose': False}
    #这里的verbose之所以是False于action参数有关
ar :  ['how are you', 'arg1', 'arg2']

add_option()函数里面参数的具体说明

add_option()参数说明:
action:存储方式,分为三种store、store_false、store_true
        type:类型
        dest:存储的变量
        default:默认值
        help:帮助信息
                   

action不同值得说明:

   --store 上表示命令行参数的值保存在options对象中。例如上面一段代码,如果我们对optParser.parse_args()函数传入的参数列表中带有‘-f’,那么就会将列表中‘-f’的下一个元素作为其dest的实参filename的值,他们两个参数形成一个字典中的一个元素{filename:file_txt}。相反当我们的参数列表中没有‘-f’这个元素时,那么filename的值就会为空。

  --store_false fakeArgs 中存在'-v'verbose将会返回False,而不是‘how are you’,也就是说verbose的值与'-v'的后一位无关,只与‘-v’存在不存在有关。

  --store_ture  这与action="store_false"类似,只有其中有参数'-v'存在,则verbose的值为True,如果'-v'不存在,那么verbose的值为None。

参考于CSDN

默认的一个option -h

除了自定义的,在命令行输入-h--help会自动整合所有选项的help及名称显示出来。如果添加一个usage的字符串也能把usage显示出来,例如:

import sys
from optparse import OptionParser

if __name__ == '__main__':
    args = sys.argv[1:]
    #读取除文件地址外得参数
    
    usage = "This is test!" #使用方法字符串
    optParser = OptionParser(usage) #创建一个对象 并把usage传进去
   	
    optParser.add_option('-f','--file',type = "string",dest = 'filename',help="请输入文件路径")
    optParser.add_option("-u","--url", dest="url",default='http://www.baidu.com',help="请输入目标网址")
    optParser.add_option("-t","--test", dest="test",action="store_true",help="测试是否存在")
    #添加规则
    
    option , args = optParser.parse_args(args)
    #开始执行规则
    pass

最后结果如图所示

在这里插入图片描述

完整的一个命令行传参示例

import sys
from optparse import OptionParser

if __name__ == '__main__':
    args = sys.argv[1:]
    #读取除文件地址外得参数
    
    optParser = OptionParser() #创建一个对象
   	
    optParser.add_option('-f','--file',type = "string",dest = 'filename',help="请输入文件路径")
    optParser.add_option("-u","--url", dest="url",default='http://www.baidu.com',help="请输入目标网址")
    optParser.add_option("-t","--test", dest="test",action="store_true",help="测试是否存在",default='False')
    #添加规则
    
    option , args = optParser.parse_args(args)
    #开始执行规则
    
    print("-f传入了参数",option.filename) #注意option不是字典
    print("-u传入了参数",option.url)
    print("-t的状态为",option.test)
    print("args多余的东西有",args)

    pass

测试的命令行

 python test.py -f "/flag" -t "hi" abcsdsd

输出结果:

-f传入了参数 /flag
-u传入了参数 http://www.baidu.com
-t的状态为 True
args多余的东西有 ['hi', 'abcsdsd']
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值