К вашему сведению, если это виртуальная виртуальная машина, должен быть файл / proc / xen /abilities. Если его содержимое - «control_d», значит, вы работаете в dom0, иначе вы работаете в domU.
НЕ полагайтесь на версию ядра. Если виртуальная машина скомпилирована с пользовательским ядром или другой версией ядра или даже современным ядром PV-ops (в котором нет строки "xen", в отличие от ядра REDHAT), то ваш код не будет работать.
С другой стороны, есть и другие хитрые трюки. Инструкция cpuid является одним из таких примеров. Я не знаю, как это сделать в python, но если вы установите для eax значение 1 и вызовете cpuid, ответ получит бит 31 из ECX. Если он установлен, вы работаете на гипервизоре. Иначе нет. Но это работает только для 64-битных платформ.