Python: Τι OS είμαι τρέχει επάνω;

ψήφοι
410

Τι πρέπει να κοιτάξουμε να δούμε αν είμαι σε Windows, Unix, κλπ;

Δημοσιεύθηκε 05/08/2008 στις 02:23
πηγή χρήστη
Σε άλλες γλώσσες...                            


30 απαντήσεις

ψήφοι
513

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

Η έξοδος του platform.system()είναι η εξής:

  • Linux: Linux
  • Μακ: Darwin
  • των windows: Windows

Δείτε: πλατφόρμα - Πρόσβαση σε στοιχεία ταυτότητας υποκείμενης πλατφόρμας

Απαντήθηκε 05/08/2008 στις 02:27
πηγή χρήστη

ψήφοι
146

Dang - lbrandy με χτυπούν με την γροθιά, αλλά αυτό δεν σημαίνει ότι δεν μπορώ να σας παρέχουμε τα αποτελέσματα του συστήματος για τα 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'
Απαντήθηκε 05/08/2008 στις 02:57
πηγή χρήστη

ψήφοι
108

Για την ιστορία εδώ είναι τα αποτελέσματα για Mac:

>>> import os
>>> os.name
'posix'
>>> import platform
>>> platform.system()
'Darwin'
>>> platform.release()
'8.11.1'
Απαντήθηκε 05/08/2008 στις 03:13
πηγή χρήστη

ψήφοι
35

Μπορείτε επίσης να χρησιμοποιήσετε sys.platform αν έχετε ήδη εισαχθεί sys και δεν θέλετε να εισαγάγετε μια άλλη μονάδα

>>> import sys
>>> sys.platform
'linux2'
Απαντήθηκε 26/08/2008 στις 14:41
πηγή χρήστη

ψήφοι
17

το κάνω

import sys
print sys.platform

Έγγραφα εδώ: sys.platform .

Ό, τι χρειάζεστε είναι ίσως το άρθρωμα sys.

Απαντήθηκε 16/02/2009 στις 13:43
πηγή χρήστη

ψήφοι
10

Είμαι χρησιμοποιώντας το εργαλείο 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 ) (το οποίο δεν μπορώ να κάνω, έχω να χρησιμοποιούν WebLogic έξω από το κουτί), αυτό είναι ό, τι μπορώ να χρησιμοποιήσω:

def iswindows():
  os = java.lang.System.getProperty( "os.name" )
  return "win" in os.lower()
Απαντήθηκε 11/06/2010 στις 06:37
πηγή χρήστη

ψήφοι
9
>>> import platform
>>> platform.system()
Απαντήθηκε 25/06/2011 στις 10:10
πηγή χρήστη

ψήφοι
5

στο ίδιο πνεύμα....

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")
Απαντήθηκε 28/09/2011 στις 16:54
πηγή χρήστη

ψήφοι
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)
Απαντήθηκε 09/10/2011 στις 23:11
πηγή χρήστη

ψήφοι
8

Για Jython ο μόνος τρόπος για να πάρετε το όνομά os βρήκα είναι να ελέγξετε os.nameτο ακίνητο Java (προσπάθησα με 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
Απαντήθηκε 09/01/2013 στις 06:47
πηγή χρήστη

ψήφοι
24

Αν θέλετε χρήστης αναγνώσιμα δεδομένα, αλλά εξακολουθούν να αναφέρονται λεπτομερώς, μπορείτε να χρησιμοποιήσετε 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(),
))

Τα αποτελέσματα αυτού του σεναρίου έτρεξε σε μερικά διαφορετικά συστήματα είναι διαθέσιμη εδώ: https://github.com/hpcugent/easybuild/wiki/OS_flavor_name_version

Απαντήθηκε 23/01/2013 στις 08:55
πηγή χρήστη

ψήφοι
6

Ενδιαφέροντα αποτελέσματα σχετικά με τα Windows 8:

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

Επεξεργασία: Αυτό είναι ένα bug

Απαντήθηκε 14/02/2013 στις 20:44
πηγή χρήστη

ψήφοι
5

Αν δεν ψάχνετε για τον πυρήνα έκδοση κλπ, αλλά ψάχνει για την διανομή 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. Αν θέλετε να έχετε πιο γενικό σενάριο σε όλες τις πλατφόρμες, μπορείτε να συνδυάσετε αυτό με δείγματα κώδικα δίνεται σε άλλες απαντήσεις.

Απαντήθηκε 28/03/2013 στις 03:19
πηγή χρήστη

ψήφοι
73

Δείγμα κώδικα να διαφοροποιηθούν χρησιμοποιώντας 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
Απαντήθηκε 16/09/2014 στις 06:42
πηγή χρήστη

ψήφοι
3

Ελέγξτε τις διαθέσιμες δοκιμές με την πλατφόρμα της μονάδας και να εκτυπώσετε την απάντηση για το σύστημά σας:

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
Απαντήθηκε 29/10/2014 στις 22:43
πηγή χρήστη

ψήφοι
5

δοκιμάστε αυτό:

import os

os.uname()

και μπορείτε να το κάνετε:

info=os.uname()
info[0]
info[1]
Απαντήθηκε 16/01/2015 στις 16:13
πηγή χρήστη

ψήφοι
6

Προσέξτε αν είστε σε Windows με Cygwin όπου os.nameείναι posix.

>>> import os, platform
>>> print os.name
posix
>>> print platform.system()
CYGWIN_NT-6.3-WOW
Απαντήθηκε 08/07/2015 στις 13:46
πηγή χρήστη

ψήφοι
-4

Απλά για την πληρότητα, «OS» μεταβλητή περιβάλλοντος φαίνεται να ορίζεται παντού. Στα Windows XP / 7/8/10 έχει οριστεί σε "Windows_NT". Στο Linux SuSE SP2 έχει οριστεί σε "x86-64 linux SLES11 [2]". Δεν έχω πρόσβαση στο OS-X ή BSD μηχανές, θα ήταν ενδιαφέρον να ελέγξετε εκεί.

import os

os_name = os.getenv("OS")
if os_name == "Windows_NT":
    # Windows
elif "linux" in os_name:
    # Linux
elif ...
Απαντήθηκε 01/12/2015 στις 05:28
πηγή χρήστη

ψήφοι
3

Μπορείτε επίσης να χρησιμοποιήσετε μόνο μονάδα πλατφόρμα, χωρίς την εισαγωγή της μονάδας 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]
Απαντήθηκε 20/08/2016 στις 07:03
πηγή χρήστη

ψήφοι
1

Χρησιμοποιήστε το import osκαι os.nameλέξεις-κλειδιά.

Απαντήθηκε 07/05/2017 στις 02:07
πηγή χρήστη

ψήφοι
4

Τι θα λέγατε για μια νέα απάντηση:

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

Αυτό θα ήταν το αποτέλεσμα αν ήμουν με OSX

Απαντήθηκε 14/08/2017 στις 16:00
πηγή χρήστη

ψήφοι
1

Εάν εκτελείτε MacOS X και τρέχει platform.system()να πάρετε Δαρβίνου, επειδή το MacOS X είναι χτισμένο σε Δαρβίνου OS της Apple. Darwin είναι ο πυρήνας του MacOS X και είναι ουσιαστικά MacOS X χωρίς το GUI.

Απαντήθηκε 13/01/2018 στις 19:29
πηγή χρήστη

ψήφοι
0

Τι θα λέγατε για μια απλή εφαρμογή Enum όπως τα ακόλουθα; Δεν υπάρχει ανάγκη για εξωτερική libs!

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

Απαντήθηκε 27/09/2018 στις 16:39
πηγή χρήστη

ψήφοι
1

Η λύση αυτή λειτουργεί και για τις δύο 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()
Απαντήθηκε 29/01/2019 στις 11:06
πηγή χρήστη

ψήφοι
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())
Απαντήθηκε 03/02/2019 στις 20:43
πηγή χρήστη

ψήφοι
1

Μπορείτε να δείτε τον κώδικα στην pyOSinfoοποία μέρος του pip-ημερομηνία συσκευασίας, για να πάρει τις πιο σχετικές πληροφορίες OS, όπως φαίνεται από τη διανομή Python σας.

Ένας από τους πιο κοινούς λόγους που οι άνθρωποι θέλουν να ελέγξετε OS τους για τερματικό συμβατότητα και αν ορισμένες εντολές του συστήματος είναι διαθέσιμα. Δυστυχώς, η επιτυχία αυτού του ελέγχου εξαρτάται κάπως σχετικά με την εγκατάσταση python σας και το λειτουργικό σύστημα. Για παράδειγμα, unameδεν είναι διαθέσιμη στα περισσότερα πακέτα python των Windows. Το παραπάνω πρόγραμμα python θα σας δείξει την έξοδο από τα πιο συχνά χρησιμοποιούνται ενσωματωμένες λειτουργίες, που προβλέπονται ήδη από το os, sys, platform, site.

εισάγετε περιγραφή της εικόνας εδώ

Έτσι, ο καλύτερος τρόπος για να πάρετε μόνο το βασικό κώδικα εξετάζει ότι ως παράδειγμα. (Υποθέτω ότι θα μπορούσα να έχω μόνο να επικολληθεί εδώ, αλλά αυτό δεν θα ήταν πολιτικά ορθό.)

Απαντήθηκε 07/02/2019 στις 19:10
πηγή χρήστη

ψήφοι
3

Άρχισα λίγο πιο συστηματική εισαγωγή για το τι τιμές μπορείτε να περιμένετε χρησιμοποιώντας τις διάφορες ενότητες (διστάσετε να επεξεργαστείτε και να προσθέσετε το σύστημά σας):

Linux (64bit) + WSL

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, όλα τα άλλα παραμένει πανομοιότυπο
  • ίδια απόδοση σε Windows Υποσύστημα για Linux (δοκίμασα με ubuntu 18.04 LTS), εκτός από platform.architecture() = ('64bit', 'ELF')

WINDOWS (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()το οποίο είναι πανομοιότυπο με `sysconfig.get_platform
  • ανακόντα για τα παράθυρα είναι ίδια με την επίσημη παράθυρα python εγκατάστασης
  • Δεν έχω έναν υπολογιστή Mac, ούτε ένα πραγματικό σύστημα 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())
Απαντήθηκε 23/02/2019 στις 00:39
πηγή χρήστη

ψήφοι
0

Είμαι αργά στο παιχνίδι, αλλά, μόνο σε περίπτωση που κάποιος χρειάζεται, αυτή η λειτουργία μπορώ να χρησιμοποιήσω για να γίνουν προσαρμογές για κωδικό μου γι 'αυτό τρέχει σε Windows, Linux και 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'
Απαντήθηκε 22/05/2019 στις 15:32
πηγή χρήστη

ψήφοι
0

Υπάρχουν 3 τρόποι για να πάρετε OS σε Python, το καθένα με τη δική υπέρ και τα κατά του:

μέθοδος 1

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

Πώς λειτουργεί ( πηγή ): Εσωτερικά καλεί OS APIs για να πάρει το όνομα του λειτουργικού συστήματος, όπως ορίζεται από το λειτουργικό σύστημα. Αυτό μπορεί προφανώς να αλλάξει από έκδοση σε έκδοση, οπότε καλύτερα να μην χρησιμοποιήσετε άμεσα. Δείτε εδώ για διάφορες τιμές OS-συγκεκριμένες.

μέθοδος 2

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

Πώς λειτουργεί ( πηγή ): Εσωτερικά ελέγχει αν πύθωνας έχει ενότητες OS-συγκεκριμένες ονομάζεται POSIX ή nt. Αν θέλετε να εισαγάγετε αυτές τις ενότητες και τις μεθόδους κλήση σε αυτό, αυτό λειτουργεί μεγάλο. Σημειώστε ότι δεν υπάρχει διαφοροποίηση μεταξύ Linux ή OSX.

μέθοδος 3

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

Πώς λειτουργεί ( πηγή ): Εσωτερικά θα καλέσει τελικά την εσωτερική APIs OS, έχετε OS όνομα συγκεκριμένη έκδοση, όπως «Win32» ή «Win16» ή «linux1» και στη συνέχεια να εξομαλύνει σε πιο γενικές ονομασίες όπως «παράθυρα» ή «Linux» ή «Δαρβίνος», εφαρμόζοντας διάφορα heuristics. Αυτός είναι ο καλύτερος φορητός τρόπος για να πάρετε κανονικοποιημένη όνομα OS.

Περίληψη

  • Αν θέλετε να ελέγξετε αν λειτουργικό σύστημα είναι Windows ή Linux ή OSX τότε ο πιο αξιόπιστος τρόπος είναι platform.system().
  • Αν θέλετε να κάνετε OS-συγκεκριμένες κλήσεις, αλλά μέσω του ενσωματωμένου ενότητες Python posixή ntστη συνέχεια χρησιμοποιήστε os.name.
  • Αν θέλετε να πάρετε πρώτες όνομα OS όπως παρέχεται από το ίδιο λειτουργικό σύστημα, στη συνέχεια, να χρησιμοποιήσετε sys.platform.
Απαντήθηκε 24/09/2019 στις 01:28
πηγή χρήστη

ψήφοι
0

Ξέρω ότι αυτό είναι ένα παλιό θέμα, αλλά πιστεύω ότι η απάντησή μου είναι αυτή που μπορεί να είναι χρήσιμη σε κάποιους ανθρώπους που ψάχνουν για μια εύκολη, απλή να καταλάβει pythonic τρόπο για την ανίχνευση OS στον κώδικά τους. Δοκιμάστηκε σε 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
Απαντήθηκε 22/01/2020 στις 16:30
πηγή χρήστη

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