Що мені потрібно подивитися, чи я перебуваю в Windows чи Unix тощо?
Що мені потрібно подивитися, чи я перебуваю в Windows чи Unix тощо?
Відповіді:
>>> import os
>>> os.name
'posix'
>>> import platform
>>> platform.system()
'Linux'
>>> platform.release()
'2.6.22-15-generic'
Вихід такої platform.system():
LinuxDarwinWindowsДив.: platform- Доступ до ідентифікаційних даних основної платформи
platformнад sys.platform?
platform.system()повертається "Windows"замість "win32". sys.platformтакож міститься "linux2"у старих версіях Python, тоді як він містить лише "linux"новіші. platform.system()завжди повертався просто "Linux".
os.uname()існує лише для систем Unix. Документи Python 3: docs.python.org/3/library/os.html Availability: recent flavors of Unix.
Данг - Лбранді побив мене на удар, але це не означає, що я не можу надати вам системні результати для Vista!
>>> import os
>>> os.name
'nt'
>>> import platform
>>> platform.system()
'Windows'
>>> platform.release()
'Vista'
... і я не можу повірити, що ще ніхто не опублікував для Windows 10:
>>> import os
>>> os.name
'nt'
>>> import platform
>>> platform.system()
'Windows'
>>> platform.release()
'10'
platform.release() '7'
platform.release()на своїй Windows 10 , і це, безумовно, просто дало мені '8'. Можливо, я встановив python перед оновленням, але насправді ??
Для запису ось результати на Mac:
>>> import os
>>> os.name
'posix'
>>> import platform
>>> platform.system()
'Darwin'
>>> platform.release()
'8.11.1'
platform.release()повернення'19.2.0'
Приклад коду для диференціації ОС за допомогою python:
from sys import platform as _platform
if _platform == "linux" or _platform == "linux2":
# linux
elif _platform == "darwin":
# MAC OS X
elif _platform == "win32":
# Windows
elif _platform == "win64":
# Windows 64-bit
Ви також можете використовувати, sys.platformякщо ви вже імпортували sysта не хочете імпортувати інший модуль
>>> import sys
>>> sys.platform
'linux2'
Якщо ви хочете, щоб користувачі читали дані, але все-таки деталізовані, ви можете скористатися platform.platform ()
>>> import platform
>>> platform.platform()
'Linux-3.3.0-8.fc16.x86_64-x86_64-with-fedora-16-Verne'
Ось кілька можливих різних дзвінків, які ви можете здійснити, щоб визначити, де ви знаходитесь
import platform
import sys
def linux_distribution():
try:
return platform.linux_distribution()
except:
return "N/A"
print("""Python version: %s
dist: %s
linux_distribution: %s
system: %s
machine: %s
platform: %s
uname: %s
version: %s
mac_ver: %s
""" % (
sys.version.split('\n'),
str(platform.dist()),
linux_distribution(),
platform.system(),
platform.machine(),
platform.platform(),
platform.uname(),
platform.version(),
platform.mac_ver(),
))
Виходи цього сценарію працювали в декількох різних системах (Linux, Windows, Solaris, MacOS) та архітектурах (x86, x64, Itanium, power pc, sparc) доступні тут: https://github.com/hpcugent/easybuild/ wiki / OS_flavor_name_version
Наприклад, сервер Ubuntu 12.04 надає:
Python version: ['2.6.5 (r265:79063, Oct 1 2012, 22:04:36) ', '[GCC 4.4.3]']
dist: ('Ubuntu', '10.04', 'lucid')
linux_distribution: ('Ubuntu', '10.04', 'lucid')
system: Linux
machine: x86_64
platform: Linux-2.6.32-32-server-x86_64-with-Ubuntu-10.04-lucid
uname: ('Linux', 'xxx', '2.6.32-32-server', '#62-Ubuntu SMP Wed Apr 20 22:07:43 UTC 2011', 'x86_64', '')
version: #62-Ubuntu SMP Wed Apr 20 22:07:43 UTC 2011
mac_ver: ('', ('', '', ''), '')
DeprecationWarning: dist() and linux_distribution() functions are deprecated in Python 3.5
Коротка розповідь
Використовуйте platform.system(). Вона повертає Windows, Linuxабо Darwin(для OSX).
Довга історія
Існує 3 способи отримати ОС в Python, кожен з яких має свої плюси і мінуси:
Спосіб 1
>>> import sys
>>> sys.platform
'win32' # could be 'linux', 'linux2, 'darwin', 'freebsd8' etc
Як це працює ( джерело ): Внутрішньо він викликає API OS, щоб отримати ім’я ОС, як визначено ОС. Дивіться тут для різних ОС-специфічних значень.
Pro: Ніякої магії, низький рівень.
Con: версія ОС залежить, тому краще не використовувати безпосередньо.
Спосіб 2
>>> import os
>>> os.name
'nt' # for Linux and Mac it prints 'posix'
Як це працює ( джерело ): Внутрішньо він перевіряє, чи python має специфічні для ОС модулі, що називаються posix або nt.
Pro: Проста перевірити, чи є posix OS
Con: немає диференціації між Linux або OSX.
Спосіб 3
>>> import platform
>>> platform.system()
'Windows' # for Linux it prints 'Linux', Mac it prints `'Darwin'
Як це працює ( джерело ): Внутрішньо він з часом викличе внутрішні API OS, отримає назву, характерну для версії ОС, типу 'win32' або 'win16' або 'linux1', а потім нормалізується на більш загальні назви, такі як 'Windows' або 'Linux' або "Дарвін", застосувавши кілька евристик.
Pro: Найкращий портативний спосіб для Windows, OSX та Linux.
Con: Люди з Python повинні постійно оновлювати евристику нормалізації.
Підсумок
platform.system().posixабо ntвикористовуйте os.name.sys.platform.Як щодо нової відповіді:
import psutil
psutil.MACOS #True (OSX is deprecated)
psutil.WINDOWS #False
psutil.LINUX #False
Це був би вихід, якби я використовував MACOS
Я почав трохи більш систематично перераховувати, які значення ви можете очікувати, використовуючи різні модулі (не соромтеся редагувати та додавати вашу систему):
os.name posix
sys.platform linux
platform.system() Linux
sysconfig.get_platform() linux-x86_64
platform.machine() x86_64
platform.architecture() ('64bit', '')
sys.platformверсією ядра, наприклад linux2, все інше залишається ідентичнимplatform.architecture() = ('64bit', 'ELF')(із 32-бітовою колоною, що працює в 32-бітовій підсистемі)
official python installer 64bit 32bit
------------------------- ----- -----
os.name nt nt
sys.platform win32 win32
platform.system() Windows Windows
sysconfig.get_platform() win-amd64 win32
platform.machine() AMD64 AMD64
platform.architecture() ('64bit', 'WindowsPE') ('64bit', 'WindowsPE')
msys2 64bit 32bit
----- ----- -----
os.name posix posix
sys.platform msys msys
platform.system() MSYS_NT-10.0 MSYS_NT-10.0-WOW
sysconfig.get_platform() msys-2.11.2-x86_64 msys-2.11.2-i686
platform.machine() x86_64 i686
platform.architecture() ('64bit', 'WindowsPE') ('32bit', 'WindowsPE')
msys2 mingw-w64-x86_64-python3 mingw-w64-i686-python3
----- ------------------------ ----------------------
os.name nt nt
sys.platform win32 win32
platform.system() Windows Windows
sysconfig.get_platform() mingw mingw
platform.machine() AMD64 AMD64
platform.architecture() ('64bit', 'WindowsPE') ('32bit', 'WindowsPE')
cygwin 64bit 32bit
------ ----- -----
os.name posix posix
sys.platform cygwin cygwin
platform.system() CYGWIN_NT-10.0 CYGWIN_NT-10.0-WOW
sysconfig.get_platform() cygwin-3.0.1-x86_64 cygwin-3.0.1-i686
platform.machine() x86_64 i686
platform.architecture() ('64bit', 'WindowsPE') ('32bit', 'WindowsPE')
Деякі зауваження:
distutils.util.get_platform()ідентичний `sysconfig.get_platformДля порівняння зі своєю системою просто запустіть цей скрипт (і, будь ласка, додайте тут результати, якщо їх немає)
from __future__ import print_function
import os
import sys
import platform
import sysconfig
print("os.name ", os.name)
print("sys.platform ", sys.platform)
print("platform.system() ", platform.system())
print("sysconfig.get_platform() ", sysconfig.get_platform())
print("platform.machine() ", platform.machine())
print("platform.architecture() ", platform.architecture())
Я використовую інструмент WLST, який постачається з weblogic, і він не реалізує пакет платформи.
wls:/offline> import os
wls:/offline> print os.name
java
wls:/offline> import sys
wls:/offline> print sys.platform
'java1.5.0_11'
Окрім виправлення системи javaos.py ( проблема з os.system () у Windows 2003 з jdk1.5 ) (що я не можу зробити, я повинен використовувати веб-журнал поза коробкою), це те, що я використовую:
def iswindows():
os = java.lang.System.getProperty( "os.name" )
return "win" in os.lower()
/usr/bin/python3.2
def cls():
from subprocess import call
from platform import system
os = system()
if os == 'Linux':
call('clear', shell = True)
elif os == 'Windows':
call('cls', shell = True)
Для Jython єдиний спосіб отримати ім'я Os я знайшов це перевірити os.nameJava властивість (пробував з sys, osі platformмодулі для Jython 2.5.3 на WinXP):
def get_os_platform():
"""return platform name, but for Jython it uses os.name Java property"""
ver = sys.platform.lower()
if ver.startswith('java'):
import java.lang
ver = java.lang.System.getProperty("os.name").lower()
print('platform: %s' % (ver))
return ver
в тій же дузі….
import platform
is_windows=(platform.system().lower().find("win") > -1)
if(is_windows): lv_dll=LV_dll("my_so_dll.dll")
else: lv_dll=LV_dll("./my_so_dll.so")
Якщо ви не шукаєте версію ядра тощо, але шукаєте дистрибутив Linux, можливо, вам слід скористатися наступним
в python2.6 +
>>> import platform
>>> print platform.linux_distribution()
('CentOS Linux', '6.0', 'Final')
>>> print platform.linux_distribution()[0]
CentOS Linux
>>> print platform.linux_distribution()[1]
6.0
в python2.4
>>> import platform
>>> print platform.dist()
('centos', '6.0', 'Final')
>>> print platform.dist()[0]
centos
>>> print platform.dist()[1]
6.0
Очевидно, це буде працювати лише в тому випадку, якщо ви запускаєте це на Linux. Якщо ви хочете мати більш загальний сценарій на всіх платформах, ви можете змішати це з зразками коду, наведеними в інших відповідях.
спробуйте це:
import os
os.uname()
і ви можете зробити це:
info=os.uname()
info[0]
info[1]
os.uname()недоступний у Windows: docs.python.org/2/library/os.html#os.uname Наявність: останні аромати Unix.
Перевірте наявні тести на платформі модуля та надрукуйте відповідь для вашої системи:
import platform
print dir(platform)
for x in dir(platform):
if x[0].isalnum():
try:
result = getattr(platform, x)()
print "platform."+x+": "+result
except TypeError:
continue
Ви також можете використовувати тільки модуль платформи без імпорту os модуля, щоб отримати всю інформацію.
>>> import platform
>>> platform.os.name
'posix'
>>> platform.uname()
('Darwin', 'mainframe.local', '15.3.0', 'Darwin Kernel Version 15.3.0: Thu Dec 10 18:40:58 PST 2015; root:xnu-3248.30.4~1/RELEASE_X86_64', 'x86_64', 'i386')
Приємного та охайного плану для звітування можна досягти за допомогою цього рядка:
for i in zip(['system','node','release','version','machine','processor'],platform.uname()):print i[0],':',i[1]
Це дає такий вихід:
system : Darwin
node : mainframe.local
release : 15.3.0
version : Darwin Kernel Version 15.3.0: Thu Dec 10 18:40:58 PST 2015; root:xnu-3248.30.4~1/RELEASE_X86_64
machine : x86_64
processor : i386
Зазвичай цього не вистачає, це версія операційної системи, але ви повинні знати, якщо ви використовуєте Windows, Linux або mac, залежно від платформи, це використання цього тесту:
In []: for i in [platform.linux_distribution(),platform.mac_ver(),platform.win32_ver()]:
....: if i[0]:
....: print 'Version: ',i[0]
Я знаю, що це давнє запитання, але я вважаю, що моя відповідь може допомогти деяким людям, які шукають легкий, простий для розуміння пітонічний спосіб виявлення ОС у своєму коді. Випробувано на python3.7
from sys import platform
class UnsupportedPlatform(Exception):
pass
if "linux" in platform:
print("linux")
elif "darwin" in platform:
print("mac")
elif "win" in platform:
print("windows")
else:
raise UnsupportedPlatform
Якщо ви працюєте з macOS X і запускаєте, platform.system()ви отримуєте дарвін, оскільки macOS X побудований на ОС Дарвіна в Apple. Дарвін є ядром macOS X і по суті є macOS X без GUI.
Це рішення працює і для, pythonі для jython.
модуль os_identify.py :
import platform
import os
# This module contains functions to determine the basic type of
# OS we are running on.
# Contrary to the functions in the `os` and `platform` modules,
# these allow to identify the actual basic OS,
# no matter whether running on the `python` or `jython` interpreter.
def is_linux():
try:
platform.linux_distribution()
return True
except:
return False
def is_windows():
try:
platform.win32_ver()
return True
except:
return False
def is_mac():
try:
platform.mac_ver()
return True
except:
return False
def name():
if is_linux():
return "Linux"
elif is_windows():
return "Windows"
elif is_mac():
return "Mac"
else:
return "<unknown>"
Використовуйте так:
import os_identify
print "My OS: " + os_identify.name()
Як щодо простої реалізації Enum, як описано нижче? Немає необхідності у зовнішніх лайках!
import platform
from enum import Enum
class OS(Enum):
def checkPlatform(osName):
return osName.lower()== platform.system().lower()
MAC = checkPlatform("darwin")
LINUX = checkPlatform("linux")
WINDOWS = checkPlatform("windows") #I haven't test this one
Просто ви можете отримати доступ із значенням Enum
if OS.LINUX.value:
print("Cool it is Linux")
PS Це python3
Ви можете подивитися код, pyOSinfoякий є частиною пакету дати піп , щоб отримати найбільш релевантну інформацію про ОС, як це видно з вашого дистрибутива Python.
Однією з найпоширеніших причин, коли люди хочуть перевірити свою ОС, є сумісність терміналів і наявність певних системних команд. На жаль, успіх цієї перевірки дещо залежить від вашої установки python та ОС. Наприклад, unameнедоступний у більшості пакетів Windows python. Вищенаведена програма python покаже вам вихід найчастіше використовуваних вбудованих функцій, які вже надає os, sys, platform, site.
Тож найкращий спосіб отримати лише основний код - це розглядати це як приклад. (Я думаю, я міг би просто вставити його сюди, але це не було б політично коректним.)
Я запізнююся на гру, але, на всякий випадок, коли комусь це потрібно, цю функцію я використовую для внесення змін у свій код, щоб він працював у Windows, Linux та MacO:
import sys
def get_os(osoptions={'linux':'linux','Windows':'win','macos':'darwin'}):
'''
get OS to allow code specifics
'''
opsys = [k for k in osoptions.keys() if sys.platform.lower().find(osoptions[k].lower()) != -1]
try:
return opsys[0]
except:
return 'unknown_OS'