Python学习之十六_virsh批量获取虚拟机IP地址的方法
Python学习之十六_virsh批量获取虚拟机IP地址的方法
Linux命令说明
for j in \
$(for i in `virsh list |grep -v Id |grep running |awk '{print $2}'` ; \
do virsh dumpxml $i |grep "mac address"| awk -F\' '{ print $2}' && echo $i ; done) ; \
do echo -n $j && arp -an|grep $j |grep enp ; done
命令说明
双层嵌套循环
内存获取机器名字列表,并且打印.
virsh list |grep -v Id |grep running |awk '{print $2}'
然后利用机器名 获取 xml配置文件信息
virsh dumpxml $vm_name
获取mac地址信息, 并且仅展示mac地址
grep "mac address"| awk -F\' '{ print $2}'
通过arp 列表找出 对应的IP地址信息
arp -an |gerp mac_address
执行效果为:
11-K8S-m20152:54:00:61:01:8a? (xx.xxx.xxx.162) at 52:54:00:61:01:8a [ether] on enp39s0f0
11-K8S-m20352:54:00:a7:cb:c5? (xx.xxx.xxx.161) at 52:54:00:a7:cb:c5 [ether] on enp39s0f0
11-K8S-m20252:54:00:9d:77:0c? (xx.xxx.xxx.163) at 52:54:00:9d:77:0c [ether] on enp39s0f0
11-K8S-w20452:54:00:7d:18:6b? (xx.xxx.xxx.164) at 52:54:00:7d:18:6b [ether] on enp39s0f0
11-K8S-w20552:54:00:96:47:60? (xx.xxx.xxx.165) at 52:54:00:96:47:60 [ether] on enp39s0f0
11-K8S-w20752:54:00:df:06:1a? (xx.xxx.xxx.166) at 52:54:00:df:06:1a [ether] on enp39s0f0
11-K8S-n20852:54:00:04:95:18? (xx.xxx.xxx.167) at 52:54:00:04:95:18 [ether] on enp39s0f0
11-K8S-db21052:54:00:0c:75:e9? (xx.xxx.xxx.169) at 52:54:00:0c:75:e9 [ether] on enp39s0f0
执行时间信息为:
real 0m0.225s
user 0m0.159s
sys 0m0.136s
最近学习python 尝试实现一下.
#!/usr/bin/python3
# coding=utf-8
import os
vmlist = os.popen("virsh list |grep -v Id |grep running |awk '{print $2}'")
for i in vmlist :
print(i[:-1] + "机器的IP地址为: ",end="")
with os.popen("virsh dumpxml " + i[:-1] + " |grep 'mac address'| awk -F \\' '{ print $2}'") as pipe :
mac = pipe.read()
with os.popen("arp -an | grep " + mac[:-1] + " | awk '{print $2}' |head -n 1 " ) as pipe2:
ip = pipe2.read()
print(ip[1:-2])
执行结果为:
11-k8s-w15机器的IP地址为: xx.xxx.xxx.158
11-k8s-w12机器的IP地址为:
11-K8S-m201机器的IP地址为: xx.xxx.xxx.160
11-K8S-m203机器的IP地址为: xx.xxx.xxx.162
11-K8S-m202机器的IP地址为: xx.xxx.xxx.161
11-K8S-w204机器的IP地址为: xx.xxx.xxx.163
11-K8S-w205机器的IP地址为: xx.xxx.xxx.164
11-K8S-w207机器的IP地址为: xx.xxx.xxx.165
11-K8S-n208机器的IP地址为: xx.xxx.xxx.166
11-K8S-db210机器的IP地址为: xx.xxx.xxx.167
11-K8S-r215机器的IP地址为: xx.xxx.xxx.169
执行时间信息为:
real 0m0.274s
user 0m0.198s
sys 0m0.132s
Python命令解析
首先: 最开始三行的作用是指定运行脚本解析器, 以及编码和需要的os包.
#!/usr/bin/python3
# coding=utf-8
import os
其次: 一个命令获取机器列表
vmlist = os.popen("virsh list |grep -v Id |grep running |awk '{print $2}'")
需要注意 os.system() 会直接界面化执行命令, 并不能够返回结果, 需要使用 popen 的方式才能够获取
再次: 建议循环:
for i in vmlist :
循环内处理:
print(i[:-1] + " 机器的IP地址为: ",end="")
通过[:-1] 去掉最后一个回车字符, 通过指定 end="", 不能行默认换行, 便于友好展示.
with os.popen("virsh dumpxml " + i[:-1] + " |grep 'mac address'| awk -F \\' '{ print $2}'") as pipe :
mac = pipe.read()
通过 with as 命令, 将 popen 打开的命令结果集转为pipe
然后通过 read 命令, 将结果转换为字符, 不然会报对象未封装的错误.
注意 shell 命令与linux的命令是一样的.
感想
人生苦短, 要学python
python 的确能够极大的提高展现能力.
我回继续学习python. 提高自己.
虽然速度慢一点点 但是效果要好非常多.
Python学习之十六_virsh批量获取虚拟机IP地址的方法的更多相关文章
- Flask框架获取用户IP地址的方法
本文实例讲述了python使用Flask框架获取用户IP地址的方法.分享给大家供大家参考.具体如下: 下面的代码包含了html页面和python代码,非常详细,如果你正使用Flask,也可以学习一下最 ...
- C#获取真实IP地址实现方法
通常来说,大家获取用户IP地址常用的方法是: string IpAddress = ""; if((HttpContext.Current.Request.ServerVariab ...
- .net core获取本地Ip地址的方法
笔记: /// <summary> /// 获取本地Ip地址 /// </summary> /// <returns></returns> public ...
- 获取用户Ip地址通用方法常见安全隐患(HTTP_X_FORWARDED_FOR)
分析过程 这个来自一些项目中,获取用户Ip,进行用户操作行为的记录,是常见并且经常使用的. 一般朋友,都会看到如下通用获取IP地址方法. function getIP() { if (isset($_ ...
- python 学习笔记十六 django深入学习一 路由系统,模板,admin,数据库操作
django 请求流程图 django 路由系统 在django中我们可以通过定义urls,让不同的url路由到不同的处理函数 from . import views urlpatterns = [ ...
- Python 学习 第十六篇:networkx
networkx是Python的一个包,用于构建和操作复杂的图结构,提供分析图的算法.图是由顶点.边和可选的属性构成的数据结构,顶点表示数据,边是由两个顶点唯一确定的,表示两个顶点之间的关系.顶点和边 ...
- Python学习(十六)—— 数据库
一.数据库介绍 数据库(Database,DB)是按照数据结构来组织.存储和管理数据的,并且是建立在计算机存储设备上的仓库. 数据库指的是以一定方式存储在一起.能为多个用户共享.具有尽可能小的冗余度. ...
- Python学习第十六篇——异常处理
在实际中,很多时候时候,我们并不能保证我们所写的程序是完美的.比如我们程序的本意是:用户在输入框内输入数字,并进行后续数学运算,即使我们提醒了用户需要输入数字而不是文本,但是有时会无意或者恶意输入字符 ...
- python学习(十六)写爬虫爬取糗事百科段子
原文链接:爬取糗事百科段子 利用前面学到的文件.正则表达式.urllib的知识,综合运用,爬取糗事百科的段子先用urllib库获取糗事百科热帖第一页的数据.并打开文件进行保存,正好可以熟悉一下之前学过 ...
- Python学习札记(十六) 高级特性2 迭代
参考:迭代 Note 1.如果给定一个list或tuple,我们可以通过for循环来遍历这个list或tuple,这种遍历我们称为迭代(Iteration). 在C.C++.Java等语言中,for循 ...
随机推荐
- 痞子衡嵌入式:在i.MXRT1170上快速点亮一款全新LCD屏的方法与步骤(MIPI DSI接口)
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是在i.MXRT1170上快速点亮一款全新LCD屏的方法与步骤. 我们知道 LCD 屏的接口有很多:DPI-RGB.MIPI DSI.DB ...
- python中,如何优雅的解析和管理命令行参数
背景 我们在编写python程序时,程序中经常会提供多种功能或者模式,在实际使用时根据不同的参数使用不同的功能.那么如何获取命令行传入进来的参数呢? 一般方法 一般情况下,我们会使用 sys 模块,如 ...
- 斯坦福 UE4 C++ ActionRoguelike游戏实例教程 03.EQS初体验:从智障到智慧
斯坦福课程 UE4 C++ ActionRoguelike游戏实例教程 0.绪论 概述 本文章对应课程第十一章 43节.这篇文章会简单介绍EQS和实际上手使用,为AI添加更丰富的行为逻辑. 目录 初识 ...
- 一图看懂CodeArts Inspector 三大特性,带你玩转漏洞管理服务
本文分享自华为云开发者联盟公众号<一图看懂华为云CodeArts Inspector三大特性,带你玩转漏洞管理服务>. 华为云漏洞管理服务CodeArts Inspector是面向 ...
- 数据库实践丨MySQL多表join分析
摘要:在数据库查询中,往往会需要查询多个表的数据,比如查询会员信息同时查询关于这个会员的订单信息,如果分语句查询的话,效率会很低,就需要用到join关键字来连表查询了. Join并行 Join并行1. ...
- gis经纬度坐标转换多格式兼容:支持字符串/数组/GeoJSON
格式 let coordinatesStrReg = /((-*[1][0-9]{0,2}|0)(\.[0-9]{1,6})*),\s{0,2}((-*[1-9][0-9]{0,1}|0)(\.[0- ...
- 2023年iOS App Store上架流程详解(上)
很多开发者在开发完iOS APP.进行内测后,下一步就面临上架App Store,不过也有很多同学对APP上架App Store的流程不太了解,下面我们来说一下iOS APP上架App Store ...
- Filebeat的安装和使用(Linux)
安装 filebeat-7.9.3(与Elasticsearch版本一致) 考虑到Elasticsearch 比较费硬盘空间,所以目前项目中只上传error的日志.详细日志还是去具体服务器查看(没有专 ...
- Flask中本地代理的使用
本地代理 当请求到来时应用上下文和程序上下文被推入本地栈中,全局变量current_app,request,g,session都可以使用了.以current_app为例,current_app代表的是 ...
- Ali266首次商用落地,助力优酷码率最高节省40%
阿里云自研编码器Ali266于2022年1月在优酷正式上线,这是已知的业界首个H.266/VVC标准的编码器商用落地项目.经过两个月的实际运行数据显示,开启Ali266后,同等画面清晰度的情况下比原H ...