命令行参数传递

python main.py -H 192.168.1.1 -p 22,23,24

#coding:utf-8
import optparse def PortScan(host,port):
print("针对主机",host,"扫描结束了...")
def main():
Usage = "[*] Usage : main.py -H <host> -p <port>"
parser = optparse.OptionParser(Usage)
parser.add_option('-H', dest='Host', type='string', help='specify target host')
parser.add_option('-p', dest='Port', type='string', help='specify target port[s]')
(options, args) = parser.parse_args()
Host = options.Host
Port = str(options.Port).split(',')
if (Host != "None" and Port[0] != "None"):
print("针对主机{} 执行端口{} 开始扫描...".format(Host,Port))
PortScan(Host,Port)
else:
parser.print_help() if __name__ == "__main__":
main()

下面这一种适合一个命令参数干多件事.python main.py -a Query 192.168.1.1 192.168.1.2

#coding:utf-8
import optparse
def main():
Usage = "[*] Usage : main.py -a cmd <host1> <host2>"
parser=optparse.OptionParser(Usage)
parser.add_option('-a',dest="QueryHost",help="查询主机情况.")
(options,args)=parser.parse_args()
if options.QueryHost:
argc = options.QueryHost
QueryHost(argc,args)
else:
parser.print_help() def QueryHost(argc,args):
print("传递参数1:{},传递参数2:{}".format(argc,args))
if(argc == "query"):
for i in range(len(args)):
print(args[i])
elif(argc == "add"):
print("增加主机{}".format(args)) if __name__ == '__main__':
main()

我们还可以编写一个交互式的Shell环境,这样能更加灵活的操作命令,操作方式 [shell] # ls

# coding:utf-8
import os
def add(x, y):
print("两数相连",x + y)
def clear():
os.system("cls")
def main():
while True:
try:
cmd = str(input("[Shell] # ")).split()
cmd_len = len(cmd)
if (cmd == ""):
continue
elif (cmd[0] == "exit"):
exit(1)
elif (cmd[0] == "clear"):
clear()
elif (cmd[0] == "add"):
if(cmd_len-1 >= 2):
temp1 = cmd[1]
temp2 = cmd[2]
add(temp1,temp2)
else:
print("add 参数不正确,至少传递2个参数")
else:
print("没有找到这个命令")
except Exception:
continue
if __name__ == '__main__':
main()

如果需要编写一些相对大型的项目,则需要使用类来开发,以下代码用类实现的命令行传递.

#coding:utf-8
import optparse
class MyClass:
def __init__(self):
usage = '''
$$\ $$\ $$\
$$ | $$ | $$ |
$$ |$$\ $$\ $$$$$$$\ $$$$$$$\ $$$$$$\ $$$$$$\ $$ | $$\
$$ |$$ | $$ |$$ _____|$$ __$$\ \____$$\ $$ __$$\ $$ | $$ |
$$ |$$ | $$ |\$$$$$$\ $$ | $$ | $$$$$$$ |$$ | \__|$$$$$$ /
$$ |$$ | $$ | \____$$\ $$ | $$ |$$ __$$ |$$ | $$ _$$<
$$ |\$$$$$$$ |$$$$$$$ |$$ | $$ |\$$$$$$$ |$$ | $$ | \$$\
\__| \____$$ |\_______/ \__| \__| \_______|\__| \__| \__|
$$\ $$ |
\$$$$$$ |
\______/
'''
parser = optparse.OptionParser(usage=usage)
parser.add_option("-s", "--server", type="string" , dest="server", help="you server IP")
parser.add_option("-p", "--port", type="int", dest="port", help="you server port")
self.options, self.args = parser.parse_args()
parser.print_help()
def check(self):
if not self.options.server or not self.options.port:
exit()
def fuck(self,ip,port):
try:
print("接收到参数列表,准备执行功能!")
for i in range(0,100):
print(ip,port)
except:
print("[ - ] Not Generate !") if __name__ == '__main__':
opt = MyClass()
opt.check() ip = opt.options.server
port = opt.options.port
if ip != "None" and port != "None":
opt.fuck(ip,port)

Python 命令行模块使用技巧的更多相关文章

  1. 快速上手 Python 命令行模块 Click

    关于Click? 说下 Click 模块是干啥的,简单说,它就是把我们的 Python 脚本的一些函数,通过 添加带有 Click 关键字的装饰器进行装饰进而将函数调用的形式转化为命令行传参的形式然后 ...

  2. Python命令行模块(sys.argv,argparse,click)

    Python作为一门脚本语言,经常作为脚本接受命令行传入参数,Python接受命令行参数大概有三种方式.因为在日常工作场景会经常使用到,这里对这几种方式进行总结. 命令行参数模块 这里命令行参数模块平 ...

  3. python命令行解析模块--argparse

    python命令行解析模块--argparse 目录 简介 详解ArgumentParser方法 详解add_argument方法 参考文档: https://www.jianshu.com/p/aa ...

  4. Python多版本情况下四种快速进入交互式命令行的操作技巧

    因为工作需求或者学习需要等原因,部分小伙伴的电脑中同时安装了Python2和Python3,相信在Python多版本的切换中常常会遇到Python傻傻分不清楚的情况,今天小编整理了四个操作技巧,以帮助 ...

  5. Python命令行参数解析模块getopt使用实例

    Python命令行参数解析模块getopt使用实例 这篇文章主要介绍了Python命令行参数解析模块getopt使用实例,本文讲解了使用语法格式.短选项参数实例.长选项参数实例等内容,需要的朋友可以参 ...

  6. python命令行下tab键补全命令

    在python命令行下不能使用tab键将命令进行补全,手动输入又很容易出错. 解决:tab.py #/usr/bin/env python # -*- coding:utf-8 -*- ''' 该模块 ...

  7. CentOS 6.5上安装python2.7、pip以及Python命令行补全和yum冲突解决

    目前CentOS6.5上自带的python版本为2.6,升级到python2.7会碰到很多问题.本文将介绍如何安装python2.7.pip以及python命令行补全. 一.如何安装python2.7 ...

  8. 让你如绅士般基于描述编写 Python 命令行工具的开源项目:docopt

    作者:HelloGitHub-Prodesire HelloGitHub 的<讲解开源项目>系列,项目地址:https://github.com/HelloGitHub-Team/Arti ...

  9. Shodan搜索引擎详解及Python命令行调用

    shodan常用信息搜索命令 shodan配置命令 shodan init T1N3uP0Lyeq5w0wxxxxxxxxxxxxxxx //API设置 shodan信息收集 shodan myip ...

随机推荐

  1. Java TreeSet,Collections使用

    一.创建TreeSet实例 public static void main(String[] args) { TreeSet set = new TreeSet(); set.add("C& ...

  2. face morhper

    图像变形背后的想法很简单.给定两个图像,我们想通过将图像和混合来创建中间图像.图像的混合和由参数控制的是在0和1之间().当为0时,变形看起来像,而当为1 时,变形看起来像.天真的,您可以在每个像素上 ...

  3. MySQL there can be only one TIMESTAMP column with CURRENT_TIMESTAMP in DEFAULT or ON UPDATE clause同时创建多个更新当前时间戳字段 解决方法

    问题重现 在写这篇文章之前,明确我的MySQL版本,MariaDB 或者你使用 MySQL 8 也会出现如下问题 MySQL 版本 现在有这样的需求,一张表中有一个字段created_at记录创建该条 ...

  4. RabbitMQ 清除全部队列及消息

    前言 安装RabbitMQ后可访问:http://{rabbitmq安装IP}:15672使用(默认的是帐号guest,密码guest.此账号只能在安装RabbitMQ的机器上登录,无法远程访问登录. ...

  5. 转 How to Find Out Who Is Locking a Table in MySQL

    MySQL is adding more tools to monitor its internals with every new release, but one thing it still l ...

  6. spring 使用Spring表达式(Spring EL)

    Spring还提供了更灵活的注入方式,那就是Spring表达式,实际上Spring EL远比以上注入方式强大,我们需要学习它.Spring EL拥有很多功能. 使用Bean的id来引用Bean. •调 ...

  7. springboot 整合 Froala Editor 3

    springboot项目中使用 Froala Editor 3,参考官网文档:https://www.froala.com/wysiwyg-editor/docs/overview 下载文件后,引入c ...

  8. 【计算机视觉】OpenCV篇(9) - 轮廓(寻找/绘制轮廓)

    什么是轮廓? 轮廓是一系列相连的点组成的曲线,代表了物体的基本外形. 轮廓与边缘好像挺像的? 是的,确实挺像,那么区别是什么呢?简而言之,轮廓是连续的,而边缘并不全都连续(见下图示例).其实边缘主要是 ...

  9. 【Leetcode_easy】1042. Flower Planting With No Adjacent

    problem 1042. Flower Planting With No Adjacent 参考 1. Leetcode_easy_1042. Flower Planting With No Adj ...

  10. spaces的坑

    spacemacs的坑,改镜像源,不能使用退格 emacs25以上可以装spacemacs 目前在mac上装emacs26.1 使用spacemacs的时候会有melpa.org访问慢或者访问不了的问 ...