سؤال

ماذا يجب أن ننظر لمعرفة ما إذا كان على Windows أو Unix ، وما إلى ذلك ؟

هل كانت مفيدة؟

المحلول

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

إخراج platform.system() على النحو التالي:

  • لينكس: Linux
  • ماك: Darwin
  • ويندوز: Windows

انظر: منصة الوصول إلى منصة الكامنة هو تحديد البيانات

نصائح أخرى

دانغ -- lbrandy يضربني لكمة, ولكن هذا لا يعني أنني لا يمكن أن توفر لك مع نتائج النظام فيستا!

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

و لا أصدق أن لا أحد نشر أحد ويندوز 10 بعد:

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

للعلم وهنا النتائج على ماك:

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

نموذج التعليمات البرمجية لتمييز نظام التشغيل هذا باستخدام بيثون:

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.منصة إذا كان لديك بالفعل المستوردة sys و كنت لا ترغب في استيراد آخر وحدة

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

إذا كنت تريد المستخدم قراءة البيانات ولكن لا يزال مفصلة ، يمكنك استخدام منصة.منصة()

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

مخرجات هذا البرنامج النصي ركض على عدة أنظمة مختلفة (لينكس, ويندوز, Solaris, ماك) و أبنية (x86, x64, Itanium, power pc, sparc) هو متاح هنا: https://github.com/hpcugent/easybuild/wiki/OS_flavor_name_version

أوبونتو 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: ('', ('', '', ''), '')

أنا أفعل هذا

import sys
print sys.platform

مستندات هنا : sys.منصة.

كل ما تحتاجه هو على الارجح في الوحدة sys.

أنا باستخدام WLST; أداة الذي يأتي مع يبلوغيتش و لا تنفيذ منصة الحزمة.

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 (مشكلة مع نظام التشغيل.نظام() على ويندوز 2003 مع jdk1.5) (الذي لا أستطيع أن أفعل ، يجب استخدام يبلوغيتش من خارج منطقة الجزاء) ، وهذا هو ما يمكنني استخدام:

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

ماذا عن إجابة جديدة:

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

هذا من شأنه أن يكون الإخراج إذا كنت تستخدم ماك

>>> import platform
>>> platform.system()

/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.name جافا الملكية (حاولت مع sys, os و platform وحدات Jython 2.5.3 على ويندوز إكس بي):

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

بدأت قليلا أكثر منهجية قائمة على ما هي القيم التي يمكن أن تتوقعها باستخدام وحدات مختلفة (لا تتردد في تعديل وإضافة النظام الخاص بك):

لينكس (64bit) + وسل

os.name                     posix
sys.platform                linux
platform.system()           Linux
sysconfig.get_platform()    linux-x86_64
platform.machine()          x86_64
platform.architecture()     ('64bit', '')
  • حاولت مع archlinux والنعناع ، وحصلت على نفس النتائج
  • على python2 sys.platform هو لاحقة من قبل نسخة النواة مثل linux2, كل شيء آخر يبقى متطابقة
  • نفس الإخراج على ويندوز الفرعي لينكس (حاولت مع أوبونتو 18.04 LTS) ، باستثناء platform.architecture() = ('64bit', 'ELF')

ويندوز (64bit)

(مع 32bit عمود في تشغيل 32bit الفرعي)

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() وهو مطابق `سيسكونفيج.get_platform
  • اناكوندا على ويندوز هو نفس الرسمية الثعبان windows installer
  • ليس لدي ماك ولا صحيح 32bit و نظام و لم يكن الدافع إلى القيام بذلك على الإنترنت

مقارنة مع النظام الخاص بك, ببساطة تشغيل هذا البرنامج النصي (و يرجى إلحاق النتائج هنا إذا مفقود :)

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

نتائج مثيرة للاهتمام على ويندوز 8:

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

تحرير: هذا علة

احترس إذا كنت على ويندوز مع Cygwin حيث os.name هو posix.

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

في نفس السياق....

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

إذا كنت لا تبحث عن نسخة النواة الخ, ولكن تبحث عن توزيعة لينكس قد ترغب في استخدام التالية

في 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

ومن الواضح أن هذا سوف تعمل فقط إذا كنت تقوم بتشغيل هذا على لينكس.إذا كنت تريد أن يكون أكثر عمومية النصي عبر المنابر ، هل يمكن خلط هذا مع رمز عينات معينة في إجابات أخرى.

جرب هذا:

import os

os.uname()

ويمكنك أن تجعل من :

info=os.uname()
info[0]
info[1]

التحقق من الاختبارات المتاحة مع وحدة منصة الطباعة الجواب عن النظام الخاص بك:

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

يمكنك أيضا استخدام فقط منصة وحدة دون استيراد نظام التشغيل وحدة للحصول على كل المعلومات.

>>> 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]

إذا كنت تشغيل ماك X و تشغيل platform.system() يمكنك الحصول على داروين لأن macOS X بنيت على أبل داروين نظام التشغيل.داروين هو النواة من macOS X و هو أساسا macOS X بدون واجهة المستخدم الرسومية.

هذا الحل يعمل على حد سواء 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()
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())

استخدام import os و os.name الكلمات الرئيسية.

ما رأيك بسيطة التعداد تنفيذ مثل ما يلي ؟ لا حاجة الخارجية يبس!

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

ببساطة يمكنك الوصول مع التعداد القيمة

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

P. S هو python3

يمكنك إلقاء نظرة على التعليمات البرمجية في pyOSinfo الذي هو جزء من النقطة تاريخ حزمة للحصول على الأكثر ذات الصلة OS المعلومات ، كما رأينا من بيثون التوزيع.

واحد من الأسباب الأكثر شيوعا من الناس ترغب في التحقق من نظام التشغيل هو محطة التوافق و إذا كان بعض أوامر النظام المتوفرة.للأسف نجاح هذا الفحص يعتمد إلى حد ما على الثعبان التركيب و التشغيل.على سبيل المثال ، uname لا يتوفر في معظم ويندوز الثعبان حزم.سبق الثعبان البرنامج سوف تظهر لك إخراج الأكثر استخداما المدمج في الوظائف التي يقدمها بالفعل os, sys, platform, site.

enter image description here

لذا فإن أفضل طريقة للحصول الأساسية فقط مدونة تبحث في أن كمثال على ذلك.(أعتقد أنني يمكن أن يكون فقط لصق هنا ، ولكن ذلك لن يكون صحيحا من الناحية السياسية.)

أنا في وقت متأخر إلى اللعبة ولكن فقط في حالة أي شخص يحتاج إليها ، هذه الوظيفة استخدام لإجراء تعديلات على قانون بلدي لذلك يعمل على ويندوز, لينكس وماك:

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'
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top