Python: Jakie OS am I uruchomione na?

głosy
410

Co muszę patrzeć, aby zobaczyć, czy jestem na Windows, Unix, itp?

Utwórz 05/08/2008 o 04:23
źródło użytkownik
W innych językach...                            


28 odpowiedzi

głosy
513

>>> import os
>>> print os.name
posix
>>> import platform
>>> platform.system()
'Linux'
>>> platform.release()
'2.6.22-15-generic'

Wyjście platform.system()jest w następujący sposób:

  • Linux: Linux
  • Prochowiec: Darwin
  • Windows: Windows

Zobacz: platforma - dostęp do platformy bazowego danych identyfikujących

Odpowiedział 05/08/2008 o 04:27
źródło użytkownik

głosy
146

Dang - lbrandy pokonać mnie do ponczu, ale to nie znaczy, że nie może dostarczyć wyników systemowych dla Vista!

>>> import os
>>> os.name
'nt'
>>> import platform
>>> platform.system()
'Windows'
>>> platform.release()
'Vista'

... i nie mogę uwierzyć niczyim pisał jeden dla Windows 10 jeszcze:

>>> import os
>>> os.name
'nt'
>>> import platform
>>> platform.system()
'Windows'
>>> platform.release()
'10'
Odpowiedział 05/08/2008 o 04:57
źródło użytkownik

głosy
108

Dla przypomnienia oto wyniki na Mac:

>>> import os
>>> os.name
'posix'
>>> import platform
>>> platform.system()
'Darwin'
>>> platform.release()
'8.11.1'
Odpowiedział 05/08/2008 o 05:13
źródło użytkownik

głosy
73

Przykładowy kod do odróżnienia przy użyciu Pythona na os:

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
Odpowiedział 16/09/2014 o 08:42
źródło użytkownik

głosy
35

Można również użyć sys.platform jeśli już importowane sys i nie chcesz importować inny moduł

>>> import sys
>>> sys.platform
'linux2'
Odpowiedział 26/08/2008 o 16:41
źródło użytkownik

głosy
24

Jeśli chcesz obsługi danych odczyt ale nadal szczegółowo, można użyć platform.platform ()

>>> import platform
>>> platform.platform()
'Linux-3.3.0-8.fc16.x86_64-x86_64-with-fedora-16-Verne'

Oto kilka różnych możliwych połączeń można dokonać w celu określenia, gdzie jesteś

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(),
))

Wyjścia z tego skryptu pobiegł na kilku różnych systemów jest dostępna tutaj: https://github.com/hpcugent/easybuild/wiki/OS_flavor_name_version

Odpowiedział 23/01/2013 o 11:55
źródło użytkownik

głosy
17

robię to

import sys
print sys.platform

Docs tutaj: sys.platform .

Wszystko, czego potrzebujesz, to prawdopodobnie w module sys.

Odpowiedział 16/02/2009 o 15:43
źródło użytkownik

głosy
10

Używam funkcji WLST że pochodzi z WebLogic, a nie realizować pakiet platformy.

wls:/offline> import os
wls:/offline> print os.name
java 
wls:/offline> import sys
wls:/offline> print sys.platform
'java1.5.0_11'

Oprócz łatanie systemu javaos.py ( problem z os.system () na Windows 2003 z jdk1.5 ) (który nie mogę zrobić, muszę używać WebLogic po wyjęciu z pudełka), to jest to, czego używam:

def iswindows():
  os = java.lang.System.getProperty( "os.name" )
  return "win" in os.lower()
Odpowiedział 11/06/2010 o 08:37
źródło użytkownik

głosy
9
>>> import platform
>>> platform.system()
Odpowiedział 25/06/2011 o 12:10
źródło użytkownik

głosy
8

Dla Jython jedynym sposobem, aby uzyskać nazwę os znalazłem jest sprawdzenie os.namewłaściwości Java (wypróbowane sys, osa platformmoduły dla Jython 2.5.3 na 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
Odpowiedział 09/01/2013 o 09:47
źródło użytkownik

głosy
7

/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)
Odpowiedział 10/10/2011 o 01:11
źródło użytkownik

głosy
6

Uważaj, jeśli jesteś na Windows z Cygwin gdzie os.namejest posix.

>>> import os, platform
>>> print os.name
posix
>>> print platform.system()
CYGWIN_NT-6.3-WOW
Odpowiedział 08/07/2015 o 14:46
źródło użytkownik

głosy
6

Interesujące wyniki dotyczące Windows 8:

>>> import os
>>> os.name
'nt'
>>> import platform
>>> platform.system()
'Windows'
>>> platform.release()
'post2008Server'

Edit: To jest błąd

Odpowiedział 14/02/2013 o 23:44
źródło użytkownik

głosy
5

Spróbuj tego:

import os

os.uname()

i można zrobić to:

info=os.uname()
info[0]
info[1]
Odpowiedział 16/01/2015 o 18:13
źródło użytkownik

głosy
5

Jeśli nie szukasz wersja jądra itp, ale patrząc na dystrybucję linuksa możesz użyć następujących

w 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

w pakietempython2.4

>>> import platform
>>> print platform.dist()
('centos', '6.0', 'Final')
>>> print platform.dist()[0]
centos
>>> print platform.dist()[1]
6.0

Oczywiście, to będzie działać tylko wtedy, gdy są uruchomione to na linux. Jeśli chcesz mieć bardziej ogólny scenariusz różnych platformach, można mieszać tego z próbkami kodu podanym w innych odpowiedzi.

Odpowiedział 28/03/2013 o 06:19
źródło użytkownik

głosy
5

W tej samej żyle....

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")
Odpowiedział 28/09/2011 o 18:54
źródło użytkownik

głosy
4

Jak o nowej odpowiedzi:

import psutil
psutil.OSX     #True
psutil.WINDOWS #False
psutil.LINUX   #False 

Byłoby to wyjście jeśli używałem OSX

Odpowiedział 14/08/2017 o 17:00
źródło użytkownik

głosy
3

Zacząłem trochę więcej systematyczną listę jakie wartości można spodziewać się za pomocą różnych modułów (czuć się swobodnie edytować i dodać swój system):

Linux (64-bit) + WSL

os.name                     posix
sys.platform                linux
platform.system()           Linux
sysconfig.get_platform()    linux-x86_64
platform.machine()          x86_64
platform.architecture()     ('64bit', '')
  • Próbowałem z ArchLinux i mięty, dostał takie same wyniki
  • na python2 sys.platformjest sufiksem wersji jądra, na przykład linux2, wszystko inne pozostaje identyczny
  • samo wyjście na Windows Subsystem for Linux (Ubuntu 18.04 próbowali LTS), z wyjątkiem platform.architecture() = ('64bit', 'ELF')

Windows (64-bitowy)

(Z kolumny 32-bitowym działa w podsystemie 32-bitowej)

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')

Kilka uwag:

  • istnieje również distutils.util.get_platform()który jest identyczny `sysconfig.get_platform
  • anakonda na oknach jest taka sama jak oficjalnego instalatora Windows python
  • Nie mam Mac ani prawdziwego systemu 32-bitowego i nie wynikało to zrobić on-line

Porównać z systemem, wystarczy uruchomić ten skrypt (i proszę dołączyć wyniki tutaj, jeśli brakuje :)

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())
Odpowiedział 23/02/2019 o 02:39
źródło użytkownik

głosy
3

Można również użyć tylko Platform Module bez importowania moduł OS Aby uzyskać wszystkie informacje.

>>> 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')

Ładny i schludny układ dla celów sprawozdawczych można osiągnąć za pomocą tej linii:

for i in zip(['system','node','release','version','machine','processor'],platform.uname()):print i[0],':',i[1]

Że daje to wyjściowy:

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

Brakuje zwykle jest to wersja systemu operacyjnego, ale należy wiedzieć, jeśli używasz systemu Windows, Linux lub Mac platforma Niezależne sposobem jest użycie tego testu:

In []: for i in [platform.linux_distribution(),platform.mac_ver(),platform.win32_ver()]:
   ....:     if i[0]:
   ....:         print 'Version: ',i[0]
Odpowiedział 20/08/2016 o 08:03
źródło użytkownik

głosy
3

Sprawdź dostępne testy z platformy modułu i drukować odpowiedź się w systemie:

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
Odpowiedział 30/10/2014 o 00:43
źródło użytkownik

głosy
2
import sys
import platform

# return a platform identifier
print(sys.platform)

# return system/os name
print(platform.system())

# print system info
# similar to 'uname' command in unix
print(platform.uname())
Odpowiedział 03/02/2019 o 22:43
źródło użytkownik

głosy
1

Można spojrzeć na kod w pyOSinfoktóry jest częścią pip-date opakowaniu, aby uzyskać najbardziej istotne informacje OS, jak wynika z dystrybucji Python.

Jednym z najczęstszych powodów ludzie chcą, aby sprawdzić ich zgodność OS jest dla terminala i jeśli są dostępne niektóre polecenia systemowe. Niestety, sukces tej kontroli jest w pewnym stopniu zależna od instalacji Pythona i OS. Na przykład, unamenie jest dostępna w większości pakietów Pythona Windows. Powyższy program python pokaże wyjście z najczęściej używanych funkcji wbudowanych, już dostarczonych przez os, sys, platform, site.

wprowadzić opis obrazu tutaj

Więc najlepszym sposobem, aby uzyskać niezbędne kod tylko patrzy na to jako przykład. (Myślę, że mógłby po prostu wklejone go tutaj, ale to nie byłaby politycznie poprawna.)

Odpowiedział 07/02/2019 o 21:10
źródło użytkownik

głosy
1

To rozwiązanie działa dla obu pythoni jython.

Moduł 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>" 

Używać tak:

import os_identify

print "My OS: " + os_identify.name()
Odpowiedział 29/01/2019 o 13:06
źródło użytkownik

głosy
1

Jeśli używasz systemu MacOS X i biegać platform.system()masz Darwina ponieważ MacOS X jest zbudowany na Apple Darwin OS. Darwin jest jądrem MacOS X i MacOS X jest zasadniczo bez GUI.

Odpowiedział 13/01/2018 o 21:29
źródło użytkownik

głosy
1

Użyj import osi os.namesłowa kluczowe.

Odpowiedział 07/05/2017 o 03:07
źródło użytkownik

głosy
0

Jestem późno do gry, ale tylko w przypadku ktoś potrzebuje, to funkcja używam dokonać korekt na mojego kodu tak, że działa na Windows, Linux i MacOS:

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'
Odpowiedział 22/05/2019 o 16:32
źródło użytkownik

głosy
0

Jak o prostej implementacji Enum jak poniżej? Nie ma potrzeby stosowania zewnętrznego bibliotekami!

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

Po prostu można uzyskać dostęp z wartości Enum

if OS.LINUX.value:
    print("Cool it is Linux")

PS Jest python3

Odpowiedział 27/09/2018 o 17:39
źródło użytkownik

głosy
-4

Tylko dla kompletności, zmienna „OS” środowisko wydaje się być zdefiniowane wszędzie. W systemie Windows XP / 7/8/10 jest ustawiony na "Windows_NT". Na Linux SuSE SP2 jest ustawiony na "x86-64 linux sles11 [2]". Nie mam dostępu do OS-X lub BSD maszyn, byłoby interesujące, by sprawdzić również tam.

import os

os_name = os.getenv("OS")
if os_name == "Windows_NT":
    # Windows
elif "linux" in os_name:
    # Linux
elif ...
Odpowiedział 01/12/2015 o 07:28
źródło użytkownik

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more