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循 ...
随机推荐
- DC-3
DC-3 前言:这个DC系列去年就做完了,但是因为那时候visualbox老崩搞得头大,一直漏了DC-3没做.现在重新搞好了来完结这个系列 扫存活的主机,显示只开了80 扫了一下目录,看了几个没有什么 ...
- Python——第四章:闭包(Closure)、装饰器(Decorators)
闭包: 本质, 内层函数对外层函数的局部变量的使用. 此时内层函数被称为闭包函数 1. 可以让一个变量常驻与内存,可随时被外层函数调用. 2. 可以避免全局变量被修改.被污染.更安全.(通 ...
- 多项式(Poly)笔记
开头先扔板子:多项式板子们 定义 多项式(polynomial)是形如 \(P(x) = \sum \limits_{i = 0}^{n} a_i x ^ i\) 的代数表达式.其中 \(x\) 是一 ...
- 文心一言 VS 讯飞星火 VS chatgpt (56)-- 算法导论6.3 2题
文心一言 VS 讯飞星火 VS chatgpt (56)-- 算法导论6.3 2题 对于 BUILD-MAX-HEAP 中第 2行的循环控制变量 i 来说,为什么我们要求它是从A.length/2到1 ...
- 【华为云技术分享】网络场景AI模型训练效率实践
[摘要] 问题 KPI异常检测项目需要对设备内多模块.多类型数据,并根据波形以及异常表现进行分析,这样的数据量往往较大,对内存和性能要求较高.同时,在设计优化算法时,需要快速得到训练及测试结果并根据结 ...
- 618大促,电商企业如何拔得头筹,“敏捷+ DevOps”有话说
前言 当今企业发展不再以大为目标,而更多追求强和快,因为只有后者才能适应时代变化让企业处以不败之地,我们称这个时代为快鱼吃大鱼的时代,追求快和强也是企业的新形态. 传统行业小到菜场经济,大到航空航天, ...
- MindSpore!这款刚刚开源的深度学习框架我爱了!
[摘要] 本文主要通过两个实际应用案例:一是基于本地 Jupyter Notebook 的 MNIST 手写数据识别:二是基于华为云服务器的 CIFAR-10 图像分类,对开源框架 MindSpore ...
- 云图说|初识ModelArts开发者生态社区——AI Gallery
阅识风云是华为云信息大咖,擅长将复杂信息多元化呈现,其出品的一张图(云图说).深入浅出的博文(云小课)或短视频(云视厅)总有一款能让您快速上手华为云.更多精彩内容请单击此处. 摘要: AI Galle ...
- [BitSail] Connector开发详解系列四:Sink、Writer
更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群 Sink Connector BitSail Sink Connector交互流程介绍 Sink:数据写入组件的生 ...
- 【已解决】无法打开.xlsx文件,xlrd.biffh.XLRDError: Excel xlsx file; not supported
原因是最近xlrd更新到了2.0.1版本,只支持.xls文件.所以x1 = xlrd.open_workbook("data.xlsx")会报错. 可以安装旧版xlrd,在cmd中 ...