Hangi işletim sistemini kullanıyorum?


Yanıtlar:


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

Çıktısı platform.system()aşağıdaki gibidir:

  • Linux: Linux
  • Mac: Darwin
  • Pencereler: Windows

Bakınız: platform- Temel platformun tanımlayıcı verilerine erişim


26
Neden tercih etmeliyiz platformüzerinde sys.platform?
matth

40
@matth Biraz daha tutarlı çıktı. yani yerine platform.system()döner . ayrıca Python'un eski sürümlerinde bulunurken, sadece yeni sürümlerde bulunur. hep geri döndü . "Windows""win32"sys.platform"linux2""linux"platform.system()"Linux"
erb

4
Mac os X'te platform.system () her zaman "Darwin" i döndürür? veya başka bir durum var mı?
baptiste chéné

4
@ baptistechéné, sorduğunuzdan beri bunun bir yıldan fazla olduğunu biliyorum, ama bir yorum olarak incinmeyecek, yine de göndereceğim :) Yani, arkasındaki neden çekirdek adını gösterdiği için. Aynı şekilde Linux (çekirdek) dağıtımlarının birçok adı vardır (Ubuntu, Arch, Fedora diğerleri arasında), ancak kendisini çekirdek adı Linux olarak gösterecektir. Darwin (BSD tabanlı bir Çekirdek), çevre sistemine, macOS'a sahiptir. Apple'ın Darwin'i açık kaynak kodu olarak yayınladığından eminim, ancak Darwin'i bildiğim başka bir dağıtım yok.
Joao Paulo Rabelo

1
@TooroSan os.uname()yalnızca Unix sistemleri için mevcuttur. Python 3 belgeleri: docs.python.org/3/library/os.html Availability: recent flavors of Unix.
Irving Moy

175

Dang - lbrandy beni yumruk attı, ama bu size Vista için sistem sonuçlarını sağlayamayacağım anlamına gelmez!

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

... ve henüz kimsenin Windows 10 için bir tane yayınlamadığına inanamıyorum:

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

6
Windows 7:platform.release() '7'
Hugo

3
Yani, evet, sadece koştum platform.release()benim üzerinde , Windows 10 ve kesinlikle sadece bana verdi '8'. Belki yükseltmeden önce python yükledim, ama gerçekten ??
Kodlayıcı

2
Windows 8'den yükselttiğinizin (temiz bir yükleme olmasına karşın) ve Python'un kayıt defterine baktığı veya geride bıraktığı her şeyin daha olası olduğunu düşünürdüm?
OJFord

2
Windows'ta python için sürüm aramasının çekirdeğinde GetVersionEx Win32 api işlevi kullanılıyor gibi görünüyor. Bu işlevle ilgili bu Microsoft makalesinin üst kısmındaki notlar alakalı olabilir: msdn.microsoft.com/tr-tr/library/windows/desktop/…
theferrit32

126

Kayıt için Mac'te sonuçlar:

>>> import os
>>> os.name
'posix'
>>> import platform
>>> platform.system()
'Darwin'
>>> platform.release()
'8.11.1'

1
MacOS Catalina 10.15.2'de platform.release()geri dönüyor'19.2.0'
Boris

95

İşletim sistemlerini python kullanarak ayırt etmek için örnek kod:

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

1
Bu örnek kod herhangi bir python modülünden mi? Aslında soruyu cevaplayan tek cevap budur.
kon psych

8
Daha net sonuçlar için, `` _platform.startswith ('linux')
Klaatu von Schlacker

42

Ayrıca kullanabilirsiniz sys.platformzaten ithal varsa sysve başka modülü almak istemiyorum

>>> import sys
>>> sys.platform
'linux2'

Yaklaşımların başka bir modül ithal etmesinin gerekmemesinin yanı sıra herhangi bir avantajı var mı?
matth

Kapsam belirleme ana avantajdır. Mümkün olduğunca az sayıda global değişken adı istiyorsunuz. Global bir ad olarak zaten "sys" varsa, başka bir ad eklememelisiniz. Ancak henüz "sys" kullanmıyorsanız, "_platform" kullanmak daha açıklayıcı olabilir ve başka bir anlamla çarpışma olasılığı daha düşük olabilir.
sanderd17

33

Kullanıcının okuyabileceği ancak yine de ayrıntılı olmasını istiyorsanız platform.platform () kullanabilirsiniz

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

Nerede olduğunuzu belirlemek için yapabileceğiniz birkaç farklı olası arama

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

Bu komut dosyasının çıktıları birkaç farklı sistemde (Linux, Windows, Solaris, MacOS) çalıştırıldı ve mimariler (x86, x64, Itanium, power pc, sparc) burada bulunabilir: https://github.com/hpcugent/easybuild/ wiki / OS_flavor_name_version

Örneğin Ubuntu 12.04 sunucusu şunları verir:

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
Boris

19

Kısa hikaye

Kullanın platform.system(). Bu döner Windows, Linuxya da Darwin(OSX için).

Uzun Hikaye

Her biri kendi profesyonel ve eksileri olan Python'da OS almanın 3 yolu vardır:

Yöntem 1

>>> import sys
>>> sys.platform
'win32'  # could be 'linux', 'linux2, 'darwin', 'freebsd8' etc

Bu nasıl çalışır ( kaynak ): Dahili olarak OS tarafından tanımlanan OS adını almak için OS API'lerini çağırır. İşletim sistemine özgü çeşitli değerler için buraya bakın .

Pro: Büyü yok, düşük seviye.

Con: İşletim sistemi sürümüne bağlıdır, bu yüzden doğrudan kullanmamak en iyisidir.

Yöntem 2

>>> import os
>>> os.name
'nt'  # for Linux and Mac it prints 'posix'

Bu nasıl çalışır ( kaynak ): Dahili olarak python'un posix veya nt adı verilen OS'ye özgü modülleri olup olmadığını kontrol eder.

Pro: Posix işletim sisteminin olup olmadığını kontrol etmek basit

Con: Linux veya OSX arasında fark yok.

Yöntem 3

>>> import platform
>>> platform.system()
'Windows' # for Linux it prints 'Linux', Mac it prints `'Darwin'

Bu nasıl çalışır ( kaynak ): Dahili olarak dahili OS API'lerini arayacak, 'win32' veya 'win16' veya 'linux1' gibi işletim sistemi sürümüne özel bir ad alacak ve daha sonra 'Windows' veya 'Linux' gibi daha genel adlara normalleştirecek veya Birkaç buluşsal yöntem uygulayarak 'Darwin'.

Pro: Windows, OSX ve Linux için en iyi taşınabilir yol.

Con: Python millet normalleşmeyi buluşsal olarak güncel tutmalıdır.

özet

  • İşletim sisteminin Windows mu yoksa Linux mu yoksa OSX mi olduğunu kontrol etmek istiyorsanız en güvenilir yol platform.system().
  • İşletim sistemine özgü çağrılar yapmak istiyorsanız, ancak yerleşik Python modülleriyle posixveya ntdaha sonraos.name .
  • İşletim sisteminin kendisi tarafından sağlanan ham işletim sistemi adını almak istiyorsanız kullanın sys.platform.

"Bir şeyleri yapmanın tek (ve tercihen tek) bir yolu olmalı" için çok fazla. Ancak bunun doğru cevap olduğuna inanıyorum. Başlıklı OS adlarıyla karşılaştırmanız gerekir, ancak bu böyle bir sorun değildir ve daha taşınabilir olacaktır.
vincent-lg

16

Yeni bir cevaba ne dersiniz:

import psutil
psutil.MACOS   #True (OSX is deprecated)
psutil.WINDOWS #False
psutil.LINUX   #False 

MACOS kullanıyor olsaydım bu çıktı olurdu


7
psutil standart lib'in bir parçası değil
Corey Goldberg

14

Çeşitli modülleri kullanarak beklediğiniz değerlerin biraz daha sistematik bir listesini başlattım (sisteminizi düzenlemek ve eklemek için çekinmeyin):

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', '')
  • archlinux ve nane ile çalıştı, aynı sonuçları aldı
  • python2 üzerinde sys.platformçekirdek sürümü eklenir, örneğin linux2, diğer her şey aynı kalır
  • Linux için Windows Alt Sisteminde aynı çıktı (ubuntu 18.04 LTS ile denendi) hariç platform.architecture() = ('64bit', 'ELF')

PENCERELER (64bit)

(32 bit alt sistemde 32 bit sütun çalışıyor)

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

Bazı açıklamalar:

  • Ayrıca distutils.util.get_platform()sysconfig.get_platform ile aynı olan
  • Windows anaconda resmi python windows yükleyici ile aynı
  • Mac'im veya gerçek bir 32bit sistemim yok ve çevrimiçi yapmak için motive olmadım

Sisteminizle karşılaştırmak için bu komut dosyasını çalıştırın (ve lütfen eksikse sonuçları buraya ekleyin :)

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

11

Weblogic ile gelen WLST aracını kullanıyorum ve platform paketini uygulamaz.

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

Dışında javaos.py ( jdk1.5 ile windows 2003 üzerinde os.system () sorunu) yama ( dışında yapamam, kutunun dışında weblogic kullanmak zorunda), bu ne kullanıyorum:

def iswindows():
  os = java.lang.System.getProperty( "os.name" )
  return "win" in os.lower()

9

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

3
SO'ya hoş geldiniz, burada, sadece nasıl değil, çözümünüzü neden kullanacağınızı açıklamak iyi bir uygulamadır. Bu, cevabınızı daha değerli hale getirecek ve daha fazla okuyucunun nasıl yaptığınızı daha iyi anlamasına yardımcı olacaktır. Ayrıca SSS bölümümüzü incelemenizi de öneririz: stackoverflow.com/faq .
ForceMagic

İyi cevap, belki de orijinal cevapla eşit. Ama nedenini açıklayabilirsiniz.
vgoff

9

Jython için buldum os adını almak için tek yol kontrol etmektir os.name(ile çalıştı Java özelliğini sys, osve platformWinXP'de Jython 2.5.3 için modüller):

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

Jython'da işletim sistemi bilgilerini ayıklamak için "platform.java_ver ()" öğesini de çağırabilirsiniz.
DocOc

8

Windows 8'de ilginç sonuçlar:

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

Düzenleme: Bu bir hata


7

Nereye Cygwin ile Windows üzerinde iseniz dikkat os.nameolduğunu posix.

>>> import os, platform
>>> print os.name
posix
>>> print platform.system()
CYGWIN_NT-6.3-WOW

6

aynı damarda....

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

9
Platform.system () bir Mac'te "Darwin" ve "Darwin" .lower (). Find ("win") = 3.
mishaF

is_windows = platform.system (). daha düşük (). başlar ("kazan") veya Yanlış
Corey Goldberg

6

Çekirdek sürümünü vb. Arıyorsanız, ancak linux dağıtımını arıyorsanız, aşağıdakileri kullanmak isteyebilirsiniz

python2.6 + 'da

>>> 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 içinde

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

Açıkçası, bu sadece linux üzerinde çalıştırıyorsanız çalışır. Platformlar arasında daha genel bir komut dosyasına sahip olmak istiyorsanız, bunu diğer yanıtlarda verilen kod örnekleri ile karıştırabilirsiniz.



4

Modül platformunda mevcut testleri kontrol edin ve sisteminiz için cevabı yazdırın:

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

4

Ayrıca tüm bilgileri almak için os modülünü içe aktarmadan yalnızca platform modülünü kullanabilirsiniz.

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

Bu hat kullanılarak raporlama amacıyla güzel ve düzenli bir düzen elde edilebilir:

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

Bu çıktıyı verir:

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

Genellikle eksik olan işletim sistemi sürümüdür, ancak Windows, linux veya mac çalıştırdığınızı bilmelisiniz, platformun bağımsız bir yolu bu testi kullanmaktır:

In []: for i in [platform.linux_distribution(),platform.mac_ver(),platform.win32_ver()]:
   ....:     if i[0]:
   ....:         print 'Version: ',i[0]

4

Bunun eski bir soru olduğunu biliyorum ama cevabımın kodlarında işletim sistemi tespit etmek için kolay, anlaşılması kolay bir pitonik yol arayan bazı insanlar için yararlı olabilecek bir soru olduğuna inanıyorum. Python üzerinde test edildi

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

2

MacOS X kullanıyorsanız ve çalıştırıyorsanız platform.system()macOS X, Apple'ın Darwin işletim sistemi üzerine kurulduğu için darwin'i alırsınız. Darwin, macOS X'in çekirdeğidir ve aslında GUI'siz macOS X'dir.


2

Bu çözüm için çalışır pythonvejython .

modül 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>" 

Bunun gibi kullanın:

import os_identify

print "My OS: " + os_identify.name()

1

Aşağıdaki gibi basit bir Enum uygulamasına ne dersiniz? Dış kütüphanelere gerek yok!

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 değeriyle kolayca erişebilirsiniz

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

PS python3 olduğunu


1

Python dağıtımınızdan görüldüğü gibi en alakalı işletim sistemi bilgilerini almak için pip-date paketinin pyOSinfoparçası olan koda bakabilirsiniz .

İnsanların işletim sistemlerini kontrol etmek istemelerinin en yaygın nedenlerinden biri terminal uyumluluğu ve belirli sistem komutlarının mevcut olup olmadığıdır. Ne yazık ki, bu kontrolün başarısı biraz python kurulumunuza ve işletim sisteminize bağlıdır. Örneğin, unameçoğu Windows python paketinde yoktur. Yukarıdaki python programı, daha önce tarafından sağlanan en yaygın kullanılan yerleşik işlevlerin çıktısını gösterecektir os, sys, platform, site.

resim açıklamasını buraya girin

En iyi yolu sadece zorunlu kod bakıyor olsun Yani bu bir örnek olarak. (Sanırım buraya yapıştırabilirdim, ama bu politik olarak doğru olmazdı.)


1

Oyuna geç kaldım, ancak herhangi birinin ihtiyacı olması durumunda, kodumda ayarlamalar yapmak için kullandığım bir işlev, böylece Windows, Linux ve MacO'larda çalışıyor:

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'
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.