![](/img/trans.png)
[英]How do I detect the version of visual studio installed with a python script
[英]How do I detect Xen in a Python script?
我需要确定我的Python脚本何时在Xen虚拟机中运行。 VM将运行Linux。
我在平台模块中找不到任何明显的内容。 我能得到的最接近的是platform.platform()中“ xen”的外观
>>> platform.platform()
'Linux-2.6.18-194.el5xen-x86_64-with-redhat-5.5-Final'
确定此的最佳方法是什么?
谢谢。
仅供参考,如果它是半虚拟机,则应该有一个/ proc / xen / capabilities文件。 如果其内容为“ control_d”,则说明您正在dom0 else下运行,而您则在domU上运行。
不要依赖内核版本。 如果VM是使用自定义内核或其他内核版本甚至是现代的PV-ops内核(与REDHAT的内核不同,其中没有“ xen”字符串)编译的,则您的代码将无法工作。
另一方面,还有其他一些妙招。 cpuid指令就是这样一个例子。 我不知道如何在python中执行此操作,但是如果将eax设置为1并调用cpuid,则ECX的第31位将具有答案。 如果已设置,则说明您正在虚拟机监控程序上运行。 否则,您不是。 但这仅适用于64位平台。
virt-what: http : //people.redhat.com/~rjones/virt-what/
virt-what是一个Shell脚本,可用于检测程序是否在虚拟机中运行。
virt-what支持大量不同的管理程序类型,包括常见的开源管理程序(KVM,Xen,QEMU,VirtualBox),大型机系统(如IBM Systemz,LPAR,z / VM),硬件分区方案(如Hitachi Virtage),专有的管理程序(如) VMWare,Microsoft Hyper-V等。
您可以调用用C编写的xen-detect命令。
您可以依赖platform.platform()
吗? 我不知道。 如果可以的话,它每次都能起作用:
>>> output = 'Linux-2.6.18-194.el5xen-x86_64-with-redhat-5.5-Final'
>>> if 'xen' in output:
print 'Xen found'
Xen found
有多种方法可以做到这一点。 您想跟随哪一个取决于您。 看看这个问题, 这里的SO,只回答了这个问题。 现在您的任务是在Python中实现此操作,这可能涉及调用一些外部进程并检查输出。 可能吗? 是。
某些系统在Fedora等Xen DomU的“常规”内核和内核中没有区别。 使用内核名称来检测系统是否在Xen之上运行并不总是可靠的。
一种可能的方法是检查内核启动消息和grep xen:
dmesg | grep xen
对于半虚拟化的VM,请使用以下命令:
ps auwx | egrep -c '\[xenbus\]$'
如果返回值为1,则它是xen半虚拟化来宾。 否则,事实并非如此。
import re, platform
def is_xen():
return bool(re.search('xen', platform.platform()))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.