iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >基于Python的shell自动化框架ShutIt怎么用
  • 303
分享到

基于Python的shell自动化框架ShutIt怎么用

2023-06-17 04:06:33 303人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

今天就跟大家聊聊有关基于python的shell自动化框架ShutIt怎么用,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。ShutIt是一个易于使用的基于shell的自动化框架。它对

今天就跟大家聊聊有关基于pythonshell自动化框架ShutIt怎么用,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

ShutIt是一个易于使用的基于shell的自动化框架。它对基于Python的expect库(pexpect)进行了包装。你可以把它看作是“没有痛点的expect”。它可以通过pip进行安装。

Hello World

让我们从最简单的例子开始吧。创建一个名为example.py的文件:

import shutit    session = shutit.create_session('bash')    session.send('echo Hello World', echo=True)

运行这个文件:

python example.py

输出:

python example.py  echo "Hello World"  echo "Hello World"  Hello World  Ians-MacBook-air.local:ORIGIN_ENV:RhuebR2T#

“send”函数的***个参数是要运行的命令。“echo”的参数将会输出到终端上。默认情况下,ShutIt是静默的。

登录服务器

如果你要登陆一台服务器并执行服务器上的命令。可以将example.py改为:

import shutit  session = shutit.create_session('bash')  session.login('ssh you@example.com', user='you', passWord='mypassword')  session.send('hostname', echo=True)  session.loGout()

程序将登录到这台服务器上,并输出主机名。

hostname    hostname    example.com    example.com:cgoIsdVv:heDa77HB#

显然,这很不安全!你可以这样运行:

import shutit  session = shutit.create_session('bash')  password = session.get_input('', ispass=True)  session.login('ssh you@example.com', user='you', password=password)  session.send('hostname', echo=True)  session.logout()

它会让你输入密码:

Input Secret:  hostname  hostname  example.com  example.com:cgoIsdVv:heDa77HB#

同样的,“login”方法在登录后改变了提示符。你给了ShutIt一个登录命令,并附带用户名和密码(如果需要的话),然后,ShutIt会完成剩余的事情。

“logout”负责终止“login”,并向屏幕输出发生的任何变化。

登录到多台服务器

假设你有一个集群包含两台服务器,并希望同时登录到这两个服务器上去。则只需要创建两个会话,并运行类似的login和send命令:

import shutit  session1 = shutit.create_session('bash')  session2 = shutit.create_session('bash')  password1 = session1.get_input('Password for server1', ispass=True)  password2 = session2.get_input('Password for server2', ispass=True)  session1.login('ssh you@one.example.com', user='you', password=password1)  session2.login('ssh you@two.example.com', user='you', password=password2)  session1.send('hostname', echo=True)  session2.send('hostname', echo=True)  session1.logout()  session2.logout()

将输出这样的结果:

$ python example.py  Password for server1  Input Secret:  Password for server2  Input Secret:  hostname  hostname  one.example.com  one.example.com:Fnh3pyFj:qkrsmUNs# hostname  hostname  two.example.com  two.example.com:Gl2lldEo:D3FavQjA#

实例:监控多台服务器

我们可以通过添加一些代码逻辑来检查命令的输出,从而将上述代码变成一个简单的监控工具

import shutit  capacity_command="""df / | awk '{print $5}' | tail -1 | sed s/[^0-9]//"""  session1 = shutit.create_session('bash')  session2 = shutit.create_session('bash')  password1 = session.get_input('Password for server1', ispass=True)  password2 = session.get_input('Password for server2', ispass=True)  session1.login('ssh you@one.example.com', user='you', password=password1)  session2.login('ssh you@two.example.com', user='you', password=password2)  capacity = session1.send_and_get_output(capacity_command)  if int(capacity) < 10:  print('RUNNING OUT OF SPACE ON server1!')  capacity = session2.send_and_get_output(capacity_command)  if int(capacity) < 10:  print('RUNNING OUT OF SPACE ON server2!')  session1.logout()  session2.logout()

在这里,我们用了“sendandget_output”方法来获取capacity_command命令的输出。

还有很多更加优雅的方法可以完成上面的操作,但这取决于你想要Python有多聪明。

更复杂的IO &ndash; Expecting

假设你需要跟一个命令行程序进行交互,并且要实现自动化操作。在这里,我们使用telnet来举一个简单的例子:

import shutit  session = shutit.create_session('bash')  session.send('telnet', expect='elnet>', echo=True)  session.send('open google.com 80', expect='scape character', echo=True)  session.send('GET /', echo=True, check_exit=False)  session.logout()

注意“expect”的参数。你只需要给出telnet提示符的一个子集来进行匹配。

注意“check_exit”的参数,后面我们会讲到这个参数的。上面这段代码将输出:

$ python example.py  telnet  telnet> open google.com 80  Trying 216.58.214.14...  Connected to google.com.  Escape character is '^]'.  GET /  Http/1.0 302 Found  Cache-Control: private  Content-Type: text/html; charset=UTF-8  Referrer-Policy: no-referrer  Location: http://www.google.co.uk/?gfe_rd=cr&ei=huczWcj3GfTW8gfq0paQDA  Content-Length: 261  Date: Sun, 04 Jun 2017 10:57:10 GMT  <HTML><HEAD><meta http-equiv="content-type" content="text/html;charset=utf-8">  <TITLE>302 Moved</TITLE></HEAD><BODY>  <H1>302 Moved</H1>  The document has moved  <A HREF="http://www.google.co.uk/?gfe_rd=cr&ei=huczWcj3GfTW8gfq0paQDA">  here  </A>.  </BODY></HTML>  Connection closed by foreign host.

现在回到“checkexit = false”上来。由于telnet命令会返回一个错误的退出码(1),我们不想让脚本执行失败,这里的“checkexit  = false”能让ShutIt知道你并不关注这个退出码。

如果你没有传入这个参数,ShutIt会给你一个交互式的提示,如果你有终端接入的话。这被称为“暂停点”。

暂停点

你可以随便在什么时候通过调用以下方法来设置一个“暂停点”。

[...]  session.pause_point('This is a pause point')  [...]

当脚本运行到暂停点时,同时按下“Ctrl”和“]”,则可以让脚本继续执行。这对于调试非常有用:添加一个暂停点,看看周围,然后继续。试试这个:

import shutit  session = shutit.create_session('bash')  session.pause_point('Have a look around!')  session.send('echo "Did you enjoy your pause point?"', echo=True)

程序输出:

$ python example.py  Have a look around!  Ians-Air.home:ORIGIN_ENV:I00LA1MQ# bash  imiell@Ians-Air:/space/git/shutit ⑂ master +   CTRL-] caught, continuing with run...  2017-06-05 15:12:33,577 INFO: Sending: exit  2017-06-05 15:12:33,633 INFO: Output (squashed): exitexitIans-Air.home:ORIGIN_ENV:I00LA1Mq# [...]  echo "Did you enjoy your pause point?"  echo "Did you enjoy your pause point?"  Did you enjoy your pause point?  Ians-Air.home:ORIGIN_ENV:I00LA1Mq#

更复杂的IO &ndash; Backgrounding

回到我们上面的“监控多台服务器”的例子上来。想象一下,我们要在每台服务器上运行一个长时间运行的任务。默认情况下,ShutIt会持续运行很长时间。但是我们可以在后台运行任务来加快ShutIt的运行速度。

在这里,你可以使用简单的命令“sleep 60”来尝试一个例子。

import shutit  import time  long_command="""sleep 60"""  session1 = shutit.create_session('bash')  session2 = shutit.create_session('bash')  password1 = session1.get_input('Password for server1', ispass=True)  password2 = session2.get_input('Password for server2', ispass=True)  session1.login('ssh you@one.example.com', user='you', password=password1)  session2.login('ssh you@two.example.com', user='you', password=password2)  start = time.time()  session1.send(long_command, background=True)  session2.send(long_command, background=True)  print('That took: ' + str(time.time() - start) + ' seconds to fire')  session1.wait()  session2.wait()  print('That took: ' + str(time.time() - start) + ' seconds to complete')

我的笔记本电脑说,运行这两个命令只需花费0.5秒,而脚本在一分钟以后才运行结束(使用了&rsquo;wait&rsquo;方法)。

虽然这个例子看起来是微不足道的,但是想像一下,如果你有数百台这样的服务器需要管理,那么你可以看到这几行代码和一个python  import所带来的强大的力量。

看完上述内容,你们对基于Python的shell自动化框架ShutIt怎么用有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注编程网Python频道,感谢大家的支持。

--结束END--

本文标题: 基于Python的shell自动化框架ShutIt怎么用

本文链接: https://www.lsjlt.com/news/287032.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 基于Python的shell自动化框架ShutIt怎么用
    今天就跟大家聊聊有关基于Python的shell自动化框架ShutIt怎么用,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。ShutIt是一个易于使用的基于shell的自动化框架。它对...
    99+
    2023-06-17
  • 基于Selenium+Python的web自动化测试框架
    一、什么是Selenium?Selenium是一个基于浏览器的自动化测试工具,它提供了一种跨平台、跨浏览器的端到端的web自动化解决方案。Selenium主要包括三部分:Selenium IDE、Selenium WebDriver 和Se...
    99+
    2023-06-04
  • 基于Selenium+Python的web自动化测试框架详解
    目录 一、什么是Selenium? 二、自动化测试框架 三、自动化框架的设计和实现 四、需要改进的模块 五、总结 一、什么是Selenium? Selenium是一个基于浏览器的自动化测试工具,它提供了一种跨平台、跨浏览器的端到端的we...
    99+
    2023-09-28
    python selenium 前端 pytest 职场和发展 自动化 运维
  • python接口自动化框架怎么搭建
    要搭建Python接口自动化框架,可以按照以下步骤进行: 确定需要使用的Python库:一般情况下,需要使用requests库来...
    99+
    2023-10-23
    python
  • 浅谈基于Pytest框架的自动化测试开发实践
    目录01 — Pytest核心功能02 — 创建测试项目03 — 编写测试用例04 — 执行测试用例05 — 数据与脚本分离06 — 参数化07 — 测试配置管理08 — 测试的准备...
    99+
    2024-04-02
  • Python的ui自动化框架搭建
    目录 一、web项目框架搭建 1.1 项目结构 1.2 代码 1.2.1 项目配置文件 1.2.2 入口文件编写 1.2.3 日志模块内容编写 1.2.4 测试用例的编写 1.3 总结 二、夹具(脚手架)的抽取和使用 2.1 共享夹具的使用...
    99+
    2023-10-20
    python ui 自动化
  • Python + selenium 自动化测试框架是怎样的
    今天就跟大家聊聊有关Python + selenium 自动化测试框架是怎样的,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。自动化测试框架项目自动化测试...
    99+
    2023-06-22
  • 基于Laravel5框架的PHP程序怎么优化
    这篇文章主要讲解了“基于Laravel5框架的PHP程序怎么优化”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“基于Laravel5框架的PHP程序怎么优化”吧!1. 配置信息缓存使用以下 A...
    99+
    2023-07-04
  • 基于python的Pygame最小开发框架怎么用
    本篇内容主要讲解“基于python的Pygame最小开发框架怎么用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“基于python的Pygame最小开发框架怎么用”吧!1.最小开发框架代码impo...
    99+
    2023-06-30
  • 常用的Python自动化测试框架有哪些
    本篇内容介绍了“常用的Python自动化测试框架有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!  1...
    99+
    2024-04-02
  • python自动化框架搭建要注意什么
    搭建Python自动化框架时,需要注意以下几点: 选择合适的测试框架:Python中有多种测试框架可供选择,如unittest、...
    99+
    2023-10-24
    python
  • Pytest自动化测试框架的使用
    目录Pytest和Unittest测试框架的区别?Pytest 安装Pytest 示例标记固件(Fixture)预处理和后处理作用域自动执行参数化总结Pytest和Unittest测...
    99+
    2023-03-19
    Pytest 自动化测试框架 Pytest 自动化
  • Python基于pywinauto怎么实现自动化采集任务
    本文小编为大家详细介绍“Python基于pywinauto怎么实现自动化采集任务”,内容详细,步骤清晰,细节处理妥当,希望这篇“Python基于pywinauto怎么实现自动化采集任务”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一...
    99+
    2023-07-06
  • Appium+Python+pytest自动化测试框架的实战
    菜鸟一枚,写的不好勿喷,大家一起学习 先简单介绍一下目录,再贴一些代码,代码里有注释 Basic目录下写的是一些公共的方法,Data目录下写的是测试数据,image存的是测试失败...
    99+
    2024-04-02
  • Python 测试框架:自动化测试的利器
    Unittest Unittest 是 Python 内置的单元测试框架。它提供了一组全面的断言方法,用于比较实际结果和预期结果。Unittest 还可以轻松分组和组织测试用例,并生成详细的测试报告。 Pytest Pytest 是一个功...
    99+
    2024-04-02
  • 基于fastapi框架的异步怎么使用
    本篇内容主要讲解“基于fastapi框架的异步怎么使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“基于fastapi框架的异步怎么使用”吧!使用fastapi框架开发web项目1、为什么要用f...
    99+
    2023-07-05
  • Python 测试框架:自动化测试的革命
    随着软件开发的复杂度不断增加,自动化测试已成为确保应用程序质量和可靠性的关键步骤。Python 因其灵活性、可扩展性和广泛的库而成为自动化测试的首选语言之一。本文将深入探讨 Python 测试框架,了解它们如何彻底改变了自动化测试的格局。...
    99+
    2024-04-02
  • Python自动化测试框架之unittest使用详解
    目录1 unittest框架2 批量执行脚本2.1 构建测试套件2.2 用例的执行顺序2.3 忽略用例执行3 unittest断言4 HTML报告生成5 异常捕捉与错误截图6 数据驱...
    99+
    2023-05-18
    Python unittest Python 自动化测试框架 Python unittest框架
  • 自动化测试框架pytest的Fixture固件怎么调用
    本篇内容介绍了“自动化测试框架pytest的Fixture固件怎么调用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!什么是固件Fixture...
    99+
    2023-07-05
  • 基于Python怎么实现自动化文档整理工具
    应用场景个人文件整理:个人在计算机上存储了大量的照片、视频和文档文件,这些文件可能分散在不同的文件夹中,使用该程序可以将这些文件整理到不同的文件夹中,并按照文件类型分类,方便管理和查找。批量文件处理:需要批量处理某个文件夹中的所有文件,如将...
    99+
    2023-05-14
    Python
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作