问题:

1、本人工作主要做自动化,经常要去Linux后台进行一些脚本操作,有时要去后台执行命令,如果逐个登陆比较费事,效率会大打折扣

2、虽然有可以直接去后台执行命令的AW,但是该AW存在很多问题,而且遇到交互式操作时不能很好的解决

基于以上问题,通过Python写了一个简单的CLI Agent,就叫做TestAgent吧,主要思路:

1、采用POST消息发送到TestAgent,TestAgent进行解析

2、TestAgent接受到消息后,把消息体存为一个文件

3、将文件更改为可执行的,然后启动一个进程去执行脚本

4、如果执行成功将结果返回给客户端,如果失败,同样将错误输出也返回给客户端

5、在POST消息的头域中可以设置超时时间,如果超时,返回“time out”,并将启动的进程给杀掉

代码如下:

 #! /usr/bin/env python
import commands
import socket
import time
import os
import multiprocessing
import uuid
from BaseHTTPServer import BaseHTTPRequestHandler,HTTPServer #HTTPServer的监听端口
PORT=12345 class HttpHandler(BaseHTTPRequestHandler):
tmpfile=''
#处理POST消息
def do_POST(self):
print self.path
content_len = int(self.headers.getheader('content-length',0))
#获取timeout
timeout = int(self.headers.getheader('timeout',0))
if timeout==0:
timeout=5
#解析消息并存储为文件
script=self.rfile.read(content_len)
x=uuid.uuid4()
self.tmpfile="."+str(x.int)
fd=open(self.tmpfile,'w')
fd.write(script)
fd.close()
os.system("chmod +x "+self.tmpfile)
script="./"+self.tmpfile
#执行脚本
self.ExecuteScript(script,timeout) def ExecuteScript(self,script,timeout=5):
#启动另一个进程执行脚本
p=multiprocessing.Process(target=self.ScriptWorker,args=(script,))
p.start()
i=0
while i<timeout:
if(not p.is_alive()):
return "successful"
else:
time.sleep(1)
i=i+1
#超时的话终止进程并杀掉执行任务的进程
p.terminate()
os.system("kill -9 "+str(p.pid))
self.send_error(400,"time out")
self.request.shutdown(socket.SHUT_RDWR)
self.request.close()
#删除临时文件
if self.tmpfile != '':
os.system("rm "+self.tmpfile)
self.tmpfile='' def ScriptWorker(self,script):
#执行脚本,返回状态码和输出
(status,result)=commands.getstatusoutput(script)
print script
print result
#如果成功返回200,如果失败返回400
if status == 0:
self.send_response(200)
else:
self.send_response(400)
self.send_header('Content-type','text/html')
self.end_headers()
self.wfile.write(result)
#删除临时文件
if self.tmpfile != '':
os.system("rm "+self.tmpfile)
self.tmpfile='' if __name__=='__main__':
os.system('rm .*')
server_address=('0.0.0.0',PORT)
http_server=HTTPServer(server_address,HttpHandler)
http_server.serve_forever()

测试:

采用curl或者restful client进行测试

1、执行简单命令

2、执行的命令不存在

3、执行一个Python脚本

4、执行一个超时的脚本

5、执行一个带有timeout头域的脚本

至此,基本所有功能都验证过了

PS:该程序理论上可以执行任何脚本,只要脚本的解释器写正确

使用时一般会再写个monitor脚本,放在crontab中,这样就完全可以不登陆服务器了,可以自动拉起TestAgent

希望该程序可以帮助大家,^v^ !!

地址:https://github.com/litlefirefly/TestAgent

基于Python的TestAgent实现的更多相关文章

  1. 【Machine Learning】决策树案例:基于python的商品购买能力预测系统

    决策树在商品购买能力预测案例中的算法实现 作者:白宁超 2016年12月24日22:05:42 摘要:随着机器学习和深度学习的热潮,各种图书层出不穷.然而多数是基础理论知识介绍,缺乏实现的深入理解.本 ...

  2. 基于Python+Django的Kubernetes集群管理平台

    ➠更多技术干货请戳:听云博客 时至今日,接触kubernetes也有一段时间了,而我们的大部分业务也已经稳定地运行在不同规模的kubernetes集群上,不得不说,无论是从应用部署.迭代,还是从资源调 ...

  3. 关于《selenium2自动测试实战--基于Python语言》

    关于本书的类型: 首先在我看来技术书分为两类,一类是“思想”,一类是“操作手册”. 对于思想类的书,一般作者有很多年经验积累,这类书需要细读与品位.高手读了会深有体会,豁然开朗.新手读了不止所云,甚至 ...

  4. psutil一个基于python的跨平台系统信息跟踪模块

    受益于这个模块的帮助,在这里我推荐一手. https://pythonhosted.org/psutil/#processes psutil是一个基于python的跨平台系统信息监视模块.在pytho ...

  5. 一次完整的自动化登录测试-基于python+selenium进行cnblog的自动化登录测试

    Web登录测试是很常见的测试!手动测试大家再熟悉不过了,那如何进行自动化登录测试呢!本文作者就用python+selenium结合unittest单元测试框架来进行一次简单但比较完整的cnblog自动 ...

  6. 搭建基于python +opencv+Beautifulsoup+Neurolab机器学习平台

    搭建基于python +opencv+Beautifulsoup+Neurolab机器学习平台 By 子敬叔叔 最近在学习麦好的<机器学习实践指南案例应用解析第二版>,在安装学习环境的时候 ...

  7. 《Selenium2自动化测试实战--基于Python语言》 --即将面市

    发展历程: <selenium_webdriver(python)第一版>   将本博客中的这个系列整理为pdf文档,免费. <selenium_webdriver(python)第 ...

  8. 从Theano到Lasagne:基于Python的深度学习的框架和库

    从Theano到Lasagne:基于Python的深度学习的框架和库 摘要:最近,深度神经网络以“Deep Dreams”形式在网站中如雨后春笋般出现,或是像谷歌研究原创论文中描述的那样:Incept ...

  9. 基于python的互联网软件测试开发(自动化测试)-全集合

    基于python的互联网软件测试开发(自动化测试)-全集合 1   关键字 为了便于搜索引擎收录本文,特别将本文的关键字给强调一下: python,互联网,自动化测试,测试开发,接口测试,服务测试,a ...

随机推荐

  1. 为 placeholder 自定义样式

    textarea::-webkit-input-placeholder{ padding: 1em; } textarea::-moz-placeholder{ padding: 1em; } 同理, ...

  2. EasyAR 开发教程系列1--小试牛刀

    大家好,我是Albert Lee(@Mars Studio),AR独立开发者.计算机视觉与人工智能研究者. AR 开发资源汇总(不断更新中):https://github.com/GeekLiB 微信 ...

  3. 浏览器控制台console

    console对象 console对象代表浏览器的JavaScript控制台.虽然它还不是标准,但是各大浏览器都原生支持,已经成为事实上的标准. console对象主要有两个作用: 显示网页代码运行时 ...

  4. CSS3 justify 文本两端对齐

    浏览器参照基准:Firefox4 and Later, Chrome5 and Later, Safari5 and Later, Opera10.53 and Later, IE5.5 and La ...

  5. JDBC总结

    今天复习了JDBC的内容,古人说温故知新,真的深有体会了.所以决定用自已的话在此记下,如有不对之处,请高手指教. JDBC连接数据库,采用的是面向接口编程.接口在java.sql和javax.sql包 ...

  6. 创建DOTA2本地数据库(一)

    在APP中,用本地数据库好于频繁的联网去获取相关数据.我使用SQLite作为本地的数据库,比较轻巧. 英雄 首先先建立英雄的数据库,暂时我先只设置ID,name,loaclized_name这三种,我 ...

  7. C语言_第一章

    1. 计算机能直接识别和接受的二进制代码称为     机器指令——>(集合) 机器语言. 2. 输出C #include<stdio.h> int main(){ printf(&q ...

  8. VS使用的一些备忘东西

    1.VSc++代码快速对齐格式化,VC内置了一个将代码按标准风格对齐的命令:ALT+F8 (需全选对齐内容)

  9. 一些用过的我常忘记的小知识(web前端)

    背景图片固定:background-attachment:fixed 将图片的尺寸从中心点开始改变:backgroun-position:center   background-size: ** 旋转 ...

  10. NOSQL场景梳理

    Redis 场景:缓存,Session,消息发布订阅,产品属性分析,订单购买等强事务,计数等   Memcached 场景:读密集,写一般的缓存,Session   MongoDB 场景:数据显示,查 ...