文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

python模块之sys和subproc

2023-01-30 23:32

关注

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秒

 

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯