Python之虚拟机操作:利用VIX二次开发,实现自己的pyvix(系列一)成果展示和python实例
在日常工作中,需要使用python脚本去自动化控制VMware虚拟机,现有的pyvix功能较少,而且不适合个人编程习惯,故萌发了开发一个berlin版本pyvix的想法,暂且叫其OpenPyVix。OpenPyVix利用vmware提供的VIX接口,对其重新封装,导出为dll文件,然后利用python的CDLL模块调用其中的方法来实现python自动化控制虚拟机的操作。本系列文章将逐步为你揭开OpenPyVix的神秘面纱,喜欢的猿们支持一下!
好了,言归正传,今天我带给大家的是可用的dll和python的sample,在随后的文章中,我会step by step的揭开OpenPyVix的面纱:如何创建dll工程,如何生成不依赖于dll(即静态编译方法)的dll文件,python中使用OpenPyVix的类实例;在具体的dll工程的开发过程中,我会带给大家诸如单例模式,以及Windows中实现互斥的方法等。
需要使用到的python模块有:ctypes中的find_library等。
1: libpath = my_find_library('VixLib.dll')
2: cwd = os.getcwd()
3: os.chdir( os.path.dirname( libpath ) )
4: vix = CDLL( libpath )
5: os.chdir(cwd)
6:
7: vmOrdinal = c_int()
8: res = vix.openVMX( byref(vmOrdinal), vmxpath, isLinux, \
9: sESXHost, sESXUser, sESXPw )
10: vix.powerOn(vmOrdinal)
11: ...
12: vix.closeHandle(vmOrdinal)
其中my_find_library方法如下:
1: def my_find_library(name):
2: lib = find_library(name)
3: if lib:
4: return lib
5:
6: #find_library sucks on Windows, so we'll fake it
7: paths = [ x for x in sys.path ]
8: paths.append( os.getcwd() )
9: paths.append( module_path )
10:
11: for path in paths:
12: try:
13: libpath = os.path.join(path,name)
14: if os.path.exists(libpath):
15: return libpath
16: except WindowsError:
17: continue
18:
19: return None
那么,我们的dll中到底有那些方法呢?看图:

正如博客园所说,代码改变世界,我是一个想通过代码来改变自己人生,改变世界的程序猿!
感谢大家的阅读,敬请期待本系列之二:Python之虚拟机操作:利用VIX二次开发,实现自己的pyvix(系列二)单例模式和互斥访问
Published by Windows Live Writer.
Python之虚拟机操作:利用VIX二次开发,实现自己的pyvix(系列一)成果展示和python实例的更多相关文章
- 3.NetDh框架之缓存操作类和二次开发模式简单设计(附源码和示例代码)
前言 NetDh框架适用于C/S.B/S的服务端框架,可用于项目开发和学习.目前包含以下四个模块 1.数据库操作层封装Dapper,支持多种数据库类型.多库实例,简单强大: 此部分具体说明可参考博客: ...
- JAVA环境下利用solrj二次开发SOlR搜索的环境部署常见错误
问题一:出现控制台坏的响应错误一Bad request 控制台出现错误如下: Bad Request request: http://hostIP:8983/solr/update?wt=javabi ...
- python 文件读写操作(24)
以前的代码都是直接将数据输出到控制台,实际上我们也可以通过读/写文件的方式读取/输出到磁盘文件中,文件读写简称I/O操作.文件I/O操作一共分为四部分:打开(open)/读取(read)/写入(wri ...
- Python 使用pymongo操作mongodb库
Python 使用pymongo操作mongodb库 2016-12-31 21:55 1115人阅读 评论(0) 收藏 举报 分类: - - - Python(10) 版权声明:本文为博主原创文 ...
- 在Python的列表中利用remove()方法删除元素的教程
在Python的列表中利用remove()方法删除元素的教程 这篇文章主要介绍了在Python的列表中利用remove()方法删除元素的教程,是Python入门中的基础知识,注意其和pop()方法的区 ...
- 为 Python Server Pages 和 Oracle 构建快速 Web 开发环境。
为 Python Server Pages 和 Oracle 构建快速 Web 开发环境. - 在水一方 - 博客频道 - CSDN.NET 为 Python Server Pages 和 Oracl ...
- SPSS二次开发
在以前关于SPSS二次开发文章中留下过自己联系方式,差不多一年的时间,零零散散的和我取得联系的人也有几十位,看来对于SPSS二次开发的需求不少. Web SPSS系统是利用SPSS二次开发技术,使用户 ...
- IBOS云办公系统二次开发之功能介绍(PHP技术)
IBOS自动化办公系统是我见到的功能.架构最好的开源自动化办公系统,功能与企业需求吻合度之高.架构之灵活,让我不得不将之介绍给大家,让跟多需要学习PHP开发的朋友来了解她,拥抱她! 如果您还没有很好的 ...
- 搭建rtmp直播流服务之4:videojs和ckPlayer开源播放器二次开发(播放rtmp、hls直播流及普通视频)
前面几章讲解了使用 nginx-rtmp搭建直播流媒体服务器; ffmpeg推流到nginx-rtmp服务器; java通过命令行调用ffmpeg实现推流服务; 从数据源获取,到使用ffmpeg推流, ...
随机推荐
- 限制UITextField输入长度
如果要限制UITextField输入长度最长不超过kMaxLength,那么需要实现做以下操作: 1.实现UITextFieldDelegate协议: 2.实现textField:shouldChan ...
- Cordova插件中JavaScript代码与Java的交互细节介绍
在Cordova官网中有这么一张架构图:大家看右下角蓝色的矩形框"Custom Plugin"--自定义插件.意思就是如果您用Cordova打包Mobile应用时,发现您的移动应用 ...
- strongSwan大坑一直重启(ubuntu)
报错 Starting strongSwan 5.3.2 IPsec [starter]... charon (20533) started after 40 ms charon stopped af ...
- 使用python批量建立文件
for i in range(101,110): n = repr(i) + '.txt' file = open('c:\\ip\\' + n, 'w')
- UVA - 1279 Asteroid Rangers (动点的最小生成树)
题意,有n个匀速动点,求最小生成树的改变次数. 一句话总结:动态问题的一般做法是先求出一个静态的解,然后求出解发生改变的事件,事件按照时间排序,依次处理. 先求出最开始的最小生成树(MST),当MST ...
- 爆零系列—补题A
http://codeforces.com/contest/615/problem/A 读错题 结果发现是无脑题 直接标记统计 #include<cstdio> #include< ...
- Asp.Net Core 入门(九)—— 环境变量 TagHelper
我们在之前讲Program.cs文件做了什么的时候,提到启动CreaeDefaultBuilder会获取环境变量来做一些判断之类的操作.那么我们的Taghelper也可以使用“ASPNETCORE_E ...
- sql server 处理分母为空
SP 前面加下面设置,会忽略错误结果 直接返回null 不会导致SP 失败 SET ANSI_WARNINGS OFFSET ARITHABORT OFFSET ARITHIGNORE ON
- python之道04
1.写代码,有如下列表,按照要求实现每一个功能 li = ["alex", "WuSir", "ritian", "barry&q ...
- tomcat假死现象 - 二
1 编写背景 最近服务器发现tomcat的应用会偶尔出现无法访问的情况.经过一段时间的观察最近又发现有台tomcat的应用出现了无法访问情况.简单描述下该台tomcat当时具体的表现:客户端请求没有响 ...