python模块之sys和subprocess以及编写简单的主机扫描脚本
python模块之sys和subprocess以及编写简单的主机扫描脚本
1.sys模块
sys.exit(n) 作用:执行到主程序末尾,解释器自动退出,但是如果需要中途退出程序,可以调用sys.exit函数,带有一个可选的整数参数返回给调用它的程序,表示你可以在主程序中捕获对sys.exit的调用。(0是正常退出,其他为异常)
sys.path 作用:获取指定模块搜索路径的字符串集合
sys.platform: 获取当前系统平台
sys.argv 在外部向程序内部传递参数
2.subprocess模块(sys模块的升级版,常用)
subprocess.run() 作用:运行命令,返回命令执行的结果(python3.5以后的版本才会有这个命令)
subprocess.call() 作用:执行命令,返回命令的状态,0或者非0,0表示执行成功
subprocess.getstatusoutput() 作用:接收字符串形式的命令,返回元组形式,第一个元素是执行状态,第二个是命令结果
subprocess.check_output() 作用:执行命令,并且返回二进制结果
3.简单的主机扫描脚本编写
2.subprocess模块
import subprocess
#subprocess.run()
#作用:运行命令,返回命令执行的结果(python3.5以后的版本才会有这个命令)
#r1=subprocess.run("dir",shell=True) #subprocess想调用cmd内置的命令,需要加上参数shell=True
#r2=subprocess.run("ping www.baidu.com") #ping程序是一个单独的程序,subprocess可以直接调用
#print(r1)
#print(r2)
#subprocess.call()
#作用:执行命令,返回命令的状态,0或者非0,0表示执行成功,1表示执行失败
#r1=subprocess.call("dir",shell=True)
#r2=subprocess.call("ping 8.8.8.8 -n 1")
#print(r1)
#print(r2)
#subprocess.getstatusoutput()
#作用:接收字符串形式的命令,返回元组形式,第一个元素是执行状态,第二个是命令结果
r1=subprocess.getstatusoutput("dir")
print(r1)
r2=subprocess.getstatusoutput("dir1")
print(r2)
r3=subprocess.getstatusoutput("ping 1.1.1.1")
print(r3)
#subprocess.check_output()
#作用:执行命令,并且返回二进制结果
r1=subprocess.check_output("dir",shell=True)
print(r1)
3.简单的主机扫描脚本编写
import sys
import os
def ping(net,start=50,end=200,n=1,w=10):
for i in range(start,end+1):
ip=net+"."+str(i)
command="ping %s -n %d -w %d >nul"%(ip,n,w) #>nul 不显示ping返回的信息
print(ip,("通","不通")[os.system(command)])
#print(os.popen(command).read()) #print(sys.argv)
#print(len(sys.argv)) if len(sys.argv) not in [2,4,6]:
print("参数输入错误!")
print("运行示例:")
print("test01.py 123.125.114")
print("test01.py 123.125.114 30 50")
print("test01.py 123.125.114 30 50 4,5")
print("语法:test01.py net startip,endip,count timeout")
elif len(sys.argv)==2:
net=sys.argv[1]
ping(net)
elif len(sys.argv)==4:
net=sys.argv[1]
ping(net,start=int(sys.argv[2]),end=int(sys.argv[3]))
else:
net=sys.argv[1]
ping(net,start=int(sys.argv[2]),end=int(sys.argv[3]),n=int(sys.argv[4]),w=int(sys.argv[5]))
运行效果如下:

4.用subprocess模块编写
代码如下:
import sys
import subprocess
import time
def ping(net,start=100,end=200,n=2,w=5):
for i in range(start,end+1):
ip=net+"."+str(i)
command="ping %s -n %d -w %d"%(ip,n,w)
print(ip,("通","不通")[subprocess.call(command,stdout=open("nul","w"))]) #stdout=open("nul","w") #不显示命令执行返回的结果
t1=time.time()
if len(sys.argv)!=2:
print("参数输入错误!")
print("运行示例:")
print("test01.py 123.125.114")
elif len(sys.argv)==2:
net=sys.argv[1]
ping(net)
t2=time.time()
print("程序耗时%f秒!"%(t2-t1)) #195.091611秒
python模块之sys和subprocess以及编写简单的主机扫描脚本的更多相关文章
- Python模块之sys模块
sys模块是与Python解释器交互的一个接口 有如下方法 sys.argv 命令行参数的一个列表,第一个参数为程序本身的路径 sys.exit(n) 退出程序,正常退出exit(0) ,异常退 ...
- python 模块之-sys
python 模块 sys import sys sys.argv # 参数,第一个参数是脚本的文件明,自定义参数为数组的第二个 sys.argv[1] sys.version # ...
- python模块中sys.argv[]使用
一.sys 模块 sys是Python的一个「标准库」,也就是官方出的「模块」,是「System」的简写,封装了一些系统的信息和接口. 官方的文档参考:https://docs.python.org/ ...
- python模块 os&sys&subprocess&hashlib模块
os模块 # os模块可根据带不带path分为两类 # 不带path print(os.getcwd()) # 得到当前工作目录 print(os.name) # 指定你正在使用的操作系统,windo ...
- Python模块 - os , sys.shutil
os 模块是与操作系统交互的一个接口 os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径 os.chdir("dirname") 改变当前脚本工作目录: ...
- python模块之sys与os
python常用模块系列(二):sys模块与os模块 sys模块是python解释器和环境有关的一个模块: os是python用来和操作系统进行交互的一个模块. 一 sys 查看当前环境变量 查看已经 ...
- Python模块之 sys
# sys模块是与python解释器交互的一个接口 import sys print(sys.argv) # 命令行参数list,第一个元素是程序本身路径 # (第一个元素就是执行文件的时候,写在py ...
- python模块之sys
sys.argv 命令行参数List,第一个元素是程序本身路径 sys.exit(n) 退出程序,正常退出时exit(0) sys.version 获取Python解释程序的版本信息 sys.maxi ...
- python模块:sys
# encoding: utf-8 # module sys # from (built-in) # by generator 1.145 """ This module ...
随机推荐
- [机器学习]回归--Polinomial Regression 多项式回归
首先我们需要明确一个概念,我们讨论的线性或者非线性针对的是自变量的系数,而非自变量本身,所以这样的话不管自变量如何变化,自变量的系数如果符合线性我们就说这是线性的.所以这里我们也就可以描述一下多项式线 ...
- tomcat和nginx配置java服务器
tomcat和nginx配置java服务器 环境配置 服务器配置 写了这么久的SSM,做了一个简单的网站[没有加入数据库],然后就要开始部署javaWEB的云服务器了.本次搭建使用的Tomcat和n ...
- 仿照 ButterKnife 的 Android 注解实例
什么是注解 java.lang.annotation,接口 Annotation,在JDK5.0及以后版本引入. 注解处理器是 javac 的一个工具,它用来在编译时扫描和处理注解(Annotatio ...
- 使用meterpreter让没有安装python解释器的肉鸡设备执行任意python程序
目标设备不需安装python解释器就能让其执行python程序 # 需要在与目标meterpreter的session中加载python模块 meterpreter > load python ...
- SpringBoot学习(五)-->SpringBoot的核心
SpringBoot的核心 1.入口类和@SpringBootApplication Spring Boot的项目一般都会有*Application的入口类,入口类中会有main方法,这是一个标准的J ...
- Html5游戏开发-图形与动画(一)
最近研究了一下出来了很久的HTML5,总结了一下,准备来个系列,文中也许有很多问题,欢迎大家指正. Canvas介绍 canvas用于在网页中绘制图形的一个元素,具体内容请查看 -> HTML5 ...
- Thinkphp table doesn't exist
系统采用Tp3.2的改造....集群为Mysql双工模式:平时M()主要是操作写,MS操作读...今天在查询 $res =MS("user u")->join("{ ...
- spring2.0:The server time zone value 'Ãùú±êüñ¼ä' is unrecognized or represents more than one time zone. You must configure either th
提示系统时区出现错误,可以在mysql中执行命令: set global time_zone='+8:00' 或者在数据库驱动的url后加上serverTimezone=UTC参数 jdbc:mysq ...
- mybatis_06SQL片段
个人概要: SQL片段在使用if where的基础上,将if,where语句装到SQL标签内,在数据库操作元素内引用 Mybatis提供了SQL片段的功能,可以提高SQL的可重用性. <!--声 ...
- Docker 系列一(概念原理和安装).
一.概念原理 Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间 ...