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 ...
随机推荐
- 03_SQL server数据类型
SQL server数据类型 String类型: 数据类型: 描述 存储 char(n) 固定长度的字符串.最多 8,000 个字符.定义类型为char(5),那么就表示该类型可以存储5个字符,即使存 ...
- python字典类型
字典类型简介 字典(dict)是存储key/value数据的容器,也就是所谓的map.hash.关联数组.无论是什么称呼,都是键值对存储的方式. 在python中,dict类型使用大括号包围: D = ...
- vue_drf之支付宝接口
一.配置 1,生成应用秘钥和公钥 下载对应系统的秘钥生成工具: https://doc.open.alipay.com/docs/doc.htm?treeId=291&articleId=10 ...
- MySQL系列详解七:MySQL双主架构演示-技术流ken
前言 在企业中,数据库高可用一直是企业的重中之重,中小企业很多都是使用mysql主从方案,一主多从,读写分离等,但是单主存在单点故障,从库切换成主库需要作改动.因此,如果是双主或者多主,就会增加mys ...
- Linux命令-基本操作和软件安装
配置JDK环境:JAVA_HOME:D:\software\JDK1.7Path:%JAVA_HOME%\bin;%JAVA_HOME%\lib; ls(查看当前目录下的文件及文件夹)sh initN ...
- 条件随机场conditional random field
主要翻译自http://blog.echen.me/2012/01/03/introduction-to-conditional-random-fields/,原作者是MIT的大神,加入了一些我自己的 ...
- OpenCV神技——人脸检测,猫脸检测
简介 OpenCV是一个基于BSD许可(开源)发行的跨平台计算机视觉库,可以运行在Linux.Windows.Android和Mac OS操作系统上.它轻量级而且高效--由一系列 C 函数和少量 ...
- Webapi--Webapi 跨域链接
1]创建 WebAPIWebAPI WebAPI,新建 ,新建 ->项目 ->ASP.NET Web >ASP.NET Web >ASP.NET Web >ASP.NET ...
- [转]BTC RPC API GetTransaction
本文转自: GetTransaction GetTransaction gettransaction调用获取指定钱包内交易的详细信息.该调用需要节点 启用钱包功能. 参数 TXID:要查看详情的交易I ...
- MVC3中 ViewBag、ViewData和TempData的使用和区别(转载)
在MVC3开始,视图数据可以通过ViewBag属性访问,在MVC2中则是使用ViewData.MVC3中保留了ViewData的使用.ViewBag 是动态类型(dynamic),ViewData 是 ...