前言:
今天大家对“vmwarepython”可能比较讲究,兄弟们都想要知道一些“vmwarepython”的相关资讯。那么小编在网络上搜集了一些关于“vmwarepython””的相关资讯,希望同学们能喜欢,我们快快来学习一下吧!本脚本是通过python实现对vmware workstation虚拟机进行操作的小脚本,主要原理是用python来调用vmrun.exe,传递各种不同的参数给它,来进行不同的操作。
相关操作代码如下:
import osimport subprocessimport time'''============ :function.......: 打开虚拟机 :param delta....: vmware_path:vmware路径 vmx_path:虚拟机vmx路径 vm_snap_name:快照名 :return.........: None============'''def run_vm(vmware_path, vmx_path): # vmrun -T ws start "c:\my VMs\myVM.vmx" # os.system(vmware_path + ' -T ws start ' + vmx_path) # os.system()是调用了C语言的标准函数system() # os.system()只是简单地把字符串传递给system()函数,自己并不会对字符串进行处理 # 所以这个bug应该是system()函数的问题或者windows shell的问题,使用""括起来或者使用subprocess模块 # os.system('"' + vmware_path + ' -T ws start ' + vmx_path + '"') subprocess.Popen(vmware_path + ' -T ws start ' + vmx_path)'''============ :function.......: 关闭虚拟机 :param delta....: vmware_path:vmware路径 vmx_path:虚拟机vmx路径 vm_snap_name:快照名 :return.........: None============'''def stop_vm(vmware_path, vmx_path): # vmrun -T ws stop "c:\my VMs\myVM.vmx" subprocess.Popen(vmware_path + ' -T ws stop ' + vmx_path)'''============ :function.......: 重置虚拟机 :param delta....: vmware_path:vmware路径 vmx_path:虚拟机vmx路径 vm_snap_name:快照名 :return.........: None============'''def reset_vm(vmware_path, vmx_path): # vmrun -T ws reset "c:\my VMs\myVM.vmx" subprocess.Popen(vmware_path + ' -T ws reset ' + vmx_path)'''============ :function.......: 挂起虚拟机 :param delta....: vmware_path:vmware路径 vmx_path:虚拟机vmx路径 :return.........: None============'''def suspend_vm(vmware_path, vmx_path): # vmrun -T ws suspend "c:\my VMs\myVM.vmx" subprocess.Popen(vmware_path + ' -T ws suspend ' + vmx_path)'''============ :function.......: 恢复快照 :param delta....: vmware_path:vmware路径 vmx_path:虚拟机vmx路径 vm_snap_name:快照名 :return.........: None============'''def revert_vm_snap(vmware_path, vmx_path, vm_snap_name): # vmrun -T ws revertToSnapshot "c:\my VMs\myVM.vmx" mySnapshot subprocess.Popen(vmware_path + ' -T ws revertToSnapshot ' + vmx_path + ' ' + vm_snap_name)'''============ :function.......: 创建快照 :param delta....: vmware_path:vmware路径 vmx_path:虚拟机vmx路径 vm_snap_name:快照名 :return.........: None============'''def create_vm_snap(vmware_path, vmx_path, vm_snap_name): # vmrun -T ws snapshot "c:\my VMs\myVM.vmx" mySnapshot subprocess.Popen(vmware_path + ' -T ws snapshot ' + vmx_path + ' ' + vm_snap_name)'''============ :function.......: 删除快照 :param delta....: vmware_path:vmware路径 vmx_path:虚拟机vmx路径 vm_snap_name:快照名 :return.........: None============'''def delete_vm_snap(vmware_path, vmx_path, vm_snap_name): # vmrun -T ws deleteSnapshot "c:\my VMs\myVM.vmx" mySnapshot subprocess.Popen(vmware_path + ' -T ws deleteSnapshot ' + vmx_path + ' ' + vm_snap_name)
调试中发现使用os.system存在个bug。如果参数只是一个加引号的字符串,os.system()就可以正常执行,但如果有多个引号对,就会出现以上错误。也就是说,如果参数类似"xx yy zz"这样的类型,os.system()可以成功执行;如果参数类似"xx yy" "aa bb"这样的类型,os.system()就会出错。
查找了相关资料发现:os.system()是调用了C语言的标准函数system(),不过os.system()函数的说明,表示os.system()这个方法有局限性。并建议使用subprocess模块。
尽量不要使用os.system()方法,而是用subprocess中的Popen对象或者call()方法代替,以免产生不可预知的错误。
python的官方网站上有人提交这个bug:,不过这个bug在07年就提交了,但看结果是wont fix(不会修复),看后面的评论,原来是os.system()只是简单地把字符串传递给system()函数,自己并不会对字符串进行处理,所以这个bug应该是system()函数的问题或者windows shell的问题。
相关资料连接:
标签: #vmwarepython