前言:
在我们编写脚本的时候,难免会遇到一些需求,就是有时候为了更好的数据展现,我们需要对一些错误的信息进行屏蔽(建议已日志文件的记录进行保存),从而实现脚本的美观及更好的可读性,下面介绍一下分别在Shell脚本及Python脚本中如何去实现这个功能。
1、场景模拟
比如说,下面这个场景:此时多出来的访问结果非常的影响阅读,而且在这个场景下也完全不需要关心返回的内容是啥,只需要知道执行的结果是成功还是失败,也就是不问过程,只问结果(有没有感觉像你的公司理念呀)。
BB那么多,如何实现呢?下面开始
1、Shell脚本案例
具体请参考这篇:Shell脚本实用小技巧-教你屏蔽执行命令的所有显示信息,包含错误信息
2、Python脚本实现黑洞
想要实现这个需求,需要两个模块,分别是:subprocess、os
,但是目前我只能实现对正确的命令执行返回信息输出进行屏蔽,无法实现对错误信息进行屏蔽(希望有大佬知道的可以指点一下,不胜感激)
2.1、正常模式
首先我们来看正常情况下是怎样的,代码如下:
import os
cmd = 'ipconfig'
os.system(cmd)
print('命令[ %s ]执行结束' %cmd)
执行结果:
2.2、黑洞模式
import os
import subprocess
dev_Null = open(os.devnull,'w')
cmd = 'ipconfig'
p = subprocess.Popen(cmd, stdout=dev_Null)
if os.system('echo %errorlevel%') == 0:
print('命令[ %s ]执行成功' %cmd)
else:
print('命令[ %s ]执行失败' %cmd)
执行效果:
3、实际应用
然后回到最初的场景设计,套上黑洞模式,得出的效果如下:
直接复制代码可能会出现语法错误喔(在vscode会出现这种情况)
import os
import time
import telnetlib
import subprocess
def curls(frequency, port, host, timeout):
frequency = frequency + 1
for s in range(1,frequency):
dev_Null = open(os.devnull,'w')
cm = 'curl ' + 'http://' + host
p = subprocess.Popen(cm, stdout=dev_Null)
if os.system('echo %errorlevel%') == 0:
print("第[ %s ]次测试成功" %s)
else:
print("第[ %s ]次测试失败" %s)
time.sleep(1)
up = time.time()
print("开始时间:", up)
curls(frequency=10, port=80, host='baidu.com', timeout=3)
en = time.time()
print("结束时间:", en)
xc = en - up
print("耗时:",xc)
执行效果:
PS D:\代码\python> & "D:/Program Files/Python39/python.exe" d://python/if/cmd_status.py
开始时间: 1605192080.006111
0
第[ 1 ]次测试成功
0
第[ 2 ]次测试成功
0
第[ 3 ]次测试成功
0
第[ 4 ]次测试成功
curl: (52) Empty reply from server
0
第[ 5 ]次测试成功
0
第[ 6 ]次测试成功
0
第[ 7 ]次测试成功
0
第[ 8 ]次测试成功
curl: (52) Empty reply from server
0
第[ 9 ]次测试成功
0
第[ 10 ]次测试成功
结束时间: 1605192090.442981
耗时: 10.436870098114014```