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 ...
随机推荐
- Java——String对象
前言 实际上任何语言都没有提供字符串这个概念,而是使用字符数组来描述字符串.Java里面严格来说也是没有字符串的,在所有的开发里面字符串的应用有很多,于是Java为了应对便创建了String类这个字符 ...
- VS2013 OpenGL 开发程序时: error LNK2019: 无法解析的外部符号 __imp____glutInitWithExit@12,error LNK2019: 无法解析的外部符号 __imp____glutCreateWindowWithExit@8
环境:Windows 下 OpenGL ,Used in VS2013 前言:刚接触 OpenGL 的人,第一件事当然就是配置环境,说起配置环境 OpenGL 和 DirectX 相差不多,同时也基本 ...
- [android] activity横竖屏切换的生命周期
模拟器横竖屏切换,ctrl+f11 界面activity会销毁,重新打开创建 第一种做法: 定死就是横屏 在清单文件,<activity/>节点部分,添加属性,设置屏幕朝向 android ...
- 浅谈select for update 和select lock in share mode的区别
有些情况下为了保证数据逻辑的一致性,需要对SELECT的操作加锁.InnoDB存储引擎对于SELECT语句支持两种一致性的锁定读(locking read)操作. . SELECT …… FOR UP ...
- 慕课网maven多环境配置
profile 下面的节点,是把profile 标签内容复制几份,并且需要把<activation> 去掉.在idea右侧 maven button 中会出现选择 节点. 接着打包命令和打 ...
- Aquarium Tank(csu1634+几何+二分)Contest2087 - 湖南多校对抗赛(2015.05.24)-G
Aquarium Tank Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 15 Solved: 4[Submit][Status][Web Board ...
- 汇编语言--微机CPU的指令系统(五)(标志位操作指令)
(2)标志位操作指令 标志位操作指令是一组对标志位置位.复位.保存和恢复等操作的指令. 1.进位CF操作指令 Ø 清进位指令CLC(Clear Carry Flag):CF←0 Ø 置进位指令STC( ...
- Aurelia binding
今天介绍一下使用Aurelia binding 模块绑定HTML属性/事件的方式.我们依然使用之前创建的代码例子. Aurelia binding 绑定属性或者方法的通用模式就是 XXX.comman ...
- JavaScript碎片—函数闭包(模拟面向对象)
经过这几天的博客浏览,让我见识大涨,其中有一篇让我感触犹深,JavaScript语言本身是没有面向对象的,但是那些大神们却深深的模拟出来了面向对象,让我震撼不已.本篇博客就是在此基础上加上自己的认知, ...
- 微信小程序 table 简单测试
<view class='AutoTable'> <view id='AutoTableItem'> <block wx:for="{{array}}" ...