概述
以前简单探索过命令接收模块,地址 Python接收命令行参数的3种方法。
准备写软件,看了 SQLMap lib/parse/cmdline.py
接收命令的代码如下,看了 argparse中文官方文档,先简单探探路。
def cmdLineParser(argv=None):
"""
This function parses the command line parameters and arguments
"""
if not argv:
argv = sys.argv
checkSystemEncoding()
# Reference: https://stackoverflow.com/a/4012683 (Note: previously used "...sys.getfilesystemencoding() or UNICODE_ENCODING")
_ = getUnicode(os.path.basename(argv[0]), encoding=sys.stdin.encoding)
usage = "%s%s [options]" % ("%s " % os.path.basename(sys.executable) if not IS_WIN else "", "\"%s\"" % _ if " " in _ else _)
parser = ArgumentParser(usage=usage)
try:
parser.add_argument("--hh", dest="advancedHelp", action="store_true",
help="Show advanced help message and exit")
parser.add_argument("--version", dest="showVersion", action="store_true",
help="Show program's version number and exit")
parser.add_argument("-v", dest="verbose", type=int,
help="Verbosity level: 0-6 (default %d)" % defaults.verbose)
参数说明
命名空间对象
使用 vars()函数
返回对象object的属性和属性值的字典对象。
args = parser.parse_args() # 获取参数对象
print(args) # Namespace(file='x', showVersion=False)
param_dict = vars(args) # 把命名空间对象转换成字典对象
复用函数
定义了一个接收命令行参数的函数,对输出的提示信息进行了解耦。
def check_params(param_list):
# 自定义打印信息
type = param_dict['file'][param_dict['file'].find(".") + 1:]
if type != "doc" or type != "docx":
print(u"程序中断: 请输入.dox或.docx文件")
exit(1)
if param_dict['showVersion']:
print(u"版本:1.0 只接收 -f 和 -v 两个参数,对整个word文档添加漏洞描述、危害、证明、加固等信息")
def shell_accept():
'''
预定义命令行参数,接收并存储
必须参数:file
可选参数:
-f / --file
-v / --version
@return:返回获取到的命令行参数args,以数据字典格式
'''
try: # 异常处理
parser = argparse.ArgumentParser(description="传入命令参数")
parser.add_argument("-f", "--file", type=str, help="待处理的word文档", required=True)
parser.add_argument("-v", "--version", dest="showVersion", action="store_true",
help="工具版本号")
args = parser.parse_args() # 获取命名空间对象
param_dict = vars(args) # 把命名空间对象转换成字典对象
check_params(param_dict)
return param_dict
except Exception as e:
print(e)