Как определить версию Ubuntu?
В настоящее время я пишу приложение Python, которое меняет некоторые сетевые файлы конфигурации. Приложение должно работать на Ubuntu 10.04 до 13.10. Проблема в том, что NetworkManager по-разному разбивается на разные версии (хотя, похоже, они, наконец, исправили его в 13.04+), и это вызывает несовместимость с моим приложением.
Я выяснил проблемы в каждой версии и разработал обходные пути для них, я просто не уверен, что лучший способ определить, какая версия Ubuntu работает.
Лучшее решение, с которым я столкнулся до сих пор, состоит в том, чтобы разобрать вывод lsb_release -a
, но это, по-видимому, довольно хрупкое решение и, вероятно, потерпит неудачу с распределенными Ubuntu дистрибутивами, такими как Mint и, возможно, даже с некоторыми "официальных" вариантов (Kubuntu, Xubuntu и т.д.).
Есть ли хороший способ определить базовый дистрибутив и версию для данного дистрибутива Linux, чтобы я мог основывать варианты, которые делает мое приложение для этой версии?
Ответы
Ответ 1
Лучшие варианты - использовать библиотеки os и платформы.
import os
import platform
print os.name #returns os name in simple form
platform.system() #returns the base system, in your case Linux
platform.release() #returns release version
Библиотека платформы должна быть более полезной.
Изменить: комментарий Роба на этом посту также подчеркивает более конкретную платформу .linux_distribution(), которую я хотел бы указать здесь.
Ответ 2
Одна вещь, которую вы можете сделать, чтобы упростить свой код, - это действительно знать одну вещь о том, как написано lsb_release. Это на самом деле написано на python.
Таким образом, мы могли бы уменьшить большую часть вашего кода:
>>> import lsb_release
>>> lsb_release.get_lsb_information()
{'RELEASE': '10.04', 'CODENAME': 'lucid', 'ID': 'Ubuntu', 'DESCRIPTION': 'Ubuntu 10.04.4 LTS'}
Это не обязательно поможет со всеми дистрибутивами sub-ubuntu, но я не знаю никакой встроенной таблицы, чтобы сделать это для вас.
Ответ 3
Также вы можете прочитать: /etc/lsb-release или /etc/debian _version в виде текстового файла
Я использую систему gentoo, и для меня:
# cat /etc/lsb-release
DISTRIB_ID="Gentoo"
Ответ 4
def getOsFullDesc():
name = ''
if isfile('/etc/lsb-release'):
lines = open('/etc/lsb-release').read().split('\n')
for line in lines:
if line.startswith('DISTRIB_DESCRIPTION='):
name = line.split('=')[1]
if name[0]=='"' and name[-1]=='"':
return name[1:-1]
if isfile('/suse/etc/SuSE-release'):
return open('/suse/etc/SuSE-release').read().split('\n')[0]
try:
import platform
return ' '.join(platform.dist()).strip().title()
#return platform.platform().replace('-', ' ')
except ImportError:
pass
if os.name=='posix':
osType = os.getenv('OSTYPE')
if osType!='':
return osType
## sys.platform == 'linux2'
return os.name
Ответ 5
вы можете просто ввести python в командной строке, тогда он будет отображаться
[email protected]:/mnt/f/make-ipinyou-data# python
Python 2.7.6 (default, Jun 22 2015, 17:58:13)
[GCC 4.8.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.