在日常工作中,需要使用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实例的更多相关文章

  1. 3.NetDh框架之缓存操作类和二次开发模式简单设计(附源码和示例代码)

    前言 NetDh框架适用于C/S.B/S的服务端框架,可用于项目开发和学习.目前包含以下四个模块 1.数据库操作层封装Dapper,支持多种数据库类型.多库实例,简单强大: 此部分具体说明可参考博客: ...

  2. JAVA环境下利用solrj二次开发SOlR搜索的环境部署常见错误

    问题一:出现控制台坏的响应错误一Bad request 控制台出现错误如下: Bad Request request: http://hostIP:8983/solr/update?wt=javabi ...

  3. python 文件读写操作(24)

    以前的代码都是直接将数据输出到控制台,实际上我们也可以通过读/写文件的方式读取/输出到磁盘文件中,文件读写简称I/O操作.文件I/O操作一共分为四部分:打开(open)/读取(read)/写入(wri ...

  4. Python 使用pymongo操作mongodb库

    Python 使用pymongo操作mongodb库 2016-12-31 21:55 1115人阅读 评论(0) 收藏 举报  分类: - - - Python(10)  版权声明:本文为博主原创文 ...

  5. 在Python的列表中利用remove()方法删除元素的教程

    在Python的列表中利用remove()方法删除元素的教程 这篇文章主要介绍了在Python的列表中利用remove()方法删除元素的教程,是Python入门中的基础知识,注意其和pop()方法的区 ...

  6. 为 Python Server Pages 和 Oracle 构建快速 Web 开发环境。

    为 Python Server Pages 和 Oracle 构建快速 Web 开发环境. - 在水一方 - 博客频道 - CSDN.NET 为 Python Server Pages 和 Oracl ...

  7. SPSS二次开发

    在以前关于SPSS二次开发文章中留下过自己联系方式,差不多一年的时间,零零散散的和我取得联系的人也有几十位,看来对于SPSS二次开发的需求不少. Web SPSS系统是利用SPSS二次开发技术,使用户 ...

  8. IBOS云办公系统二次开发之功能介绍(PHP技术)

    IBOS自动化办公系统是我见到的功能.架构最好的开源自动化办公系统,功能与企业需求吻合度之高.架构之灵活,让我不得不将之介绍给大家,让跟多需要学习PHP开发的朋友来了解她,拥抱她! 如果您还没有很好的 ...

  9. 搭建rtmp直播流服务之4:videojs和ckPlayer开源播放器二次开发(播放rtmp、hls直播流及普通视频)

    前面几章讲解了使用 nginx-rtmp搭建直播流媒体服务器; ffmpeg推流到nginx-rtmp服务器; java通过命令行调用ffmpeg实现推流服务; 从数据源获取,到使用ffmpeg推流, ...

随机推荐

  1. Sublime Text 3安装AngularJS插件

    Sublime Text 3是目前笔者用过的最好用的代码编辑器之一,界面如下图所示: 我们可以用该编辑器开发AngularJS应用,首先需要安装AngularJS提示插件. 需要以下几步: 1.安装P ...

  2. Azure 项目构建 – 部署 Jenkins 服务器以实现持续集成(CI)

    通过完整流程详细介绍了如何通过 Azure 虚拟机.虚拟网络等服务在 Azure 平台上快速搭建 Jenkins 服务器. 此系列的全部课程 https://school.azure.cn/curri ...

  3. 洛谷 P1449 后缀表达式

    题目描述 所谓后缀表达式是指这样的一个表达式:式中不再引用括号,运算符号放在两个运算对象之后,所有计算按运算符号出现的顺序,严格地由左而右新进行(不用考虑运算符的优先级). 如:3*(5–2)+7对应 ...

  4. JavaScript实现的水果忍者游戏,支持鼠标操作

    智能手机刚刚普及时,水果忍者这款小游戏可谓风靡一时.几年过去了,现在,让我们用纯JavaScript来实现这个水果忍者游戏,就算是为了锤炼我们的JavaScript开发技能吧. 大家可以通过这个链接在 ...

  5. BestCoder Round#15 1001-Love

    http://acm.hdu.edu.cn/showproblem.php?pid=5082 Love Time Limit: 2000/1000 MS (Java/Others)    Memory ...

  6. linux环境nginx的安装与使用

    因为公司需要需要安装一系列环境,新手上路第一次配的时候什么也不懂在网上找了半天,觉得这篇不错,我在这里顺便记录一下.(原文:https://www.cnblogs.com/wyd168/p/66365 ...

  7. POI导出excel项目(webwork)实例

    后台action: public String exportExcel(){ this.setUserList(this.getUserService().findUserInfosByGroupID ...

  8. hihoCode-1043-完全背包

    我们定义:best(i,x)代表i件以前的物品已经决定好选择多少件,并且在剩余奖券x的情况下的最优解. 我们可以考虑最后一步,是否再次选择i物品,在不超过持有奖券总额的情况下.上面的第二个式子的k是大 ...

  9. java中的equals与==的区别

    equals是Object类的公共方法,方法内部是用==实现的.但是很多类都重写了equals方法,例如基本数据类型的封装类和String类,重写后比较的是对象的值或者内容是否相同.而==是比较地址, ...

  10. django的rest framework框架——认证、权限、节流控制

    一.登录认证示例 模拟用户登录,获取token,当用户访问订单或用户中心时,判断用户携带正确的token,则允许查看订单和用户信息,否则抛出异常: from django.conf.urls impo ...