Vă mulțumim pentru susținere

Python: La ce sistem de operare funcționez?

De ce trebuie să mă uit pentru a vedea dacă sunt pe Windows, Unix, etc?

0
adăugat editat
Iată o întrebare înrudită: Verificați numele distribuției linux .
adăugat autor blong
vedeți ( bugs.python.org/issue12326 ) pentru detalii!
adăugat autor arnkore

19 răspunsuri

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

Ieșirea platform.system () este după cum urmează:

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

See: platform ? Access to underlying platform?s identifying data

0
adăugat
De ce aș prefera platforma peste sys.platform ?
adăugat autor matth
@ matth Ieșire puțin mai consistentă. adică platform.system () returnează "Windows" în loc de "win32" . sys.platform conține, de asemenea, "linux2" pe versiunile vechi ale Python în timp ce conține doar "linux" pe cele mai noi. platform.system () a returnat întotdeauna doar "Linux" .
adăugat autor erb
Pe mac OS X, platform.system () întoarce întotdeauna "Darwin"? sau este posibil alt caz?
adăugat autor baptiste chéné

Pentru înregistrare, aici sunt rezultatele pe Mac:

>>> import os
>>> os.name
'posix'
>>> import platform
>>> platform.system()
'Darwin'
>>> platform.release()
'8.11.1'
0
adăugat

De asemenea, puteți utiliza numai modul platformă fără a importa module os pentru a obține toate informațiile.

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

Un aspect frumos și ordonat pentru scopuri de raportare poate fi realizat folosind această linie:

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

Acest lucru oferă această ieșire:

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

Ceea ce lipsește este de obicei versiunea sistemului de operare, dar ar trebui să știți dacă executați Windows, Linux sau mac o platformă pe cale indispensabilă este să utilizați acest test:

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

Rezultate interesante pe Windows 8:

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

Edit: That's a bug

0
adăugat

Aveți grijă dacă sunteți pe Windows cu Cygwin unde os.name este posix .

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

Pentru Jython, singura modalitate de a obține numele de OS găsită este să verificați os.name proprietatea Java (încercat cu sys , os platforme pentru Jython 2.5.3 pe 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
0
adăugat

Ce zici de un nou răspuns:

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

Aceasta ar fi ieșirea dacă folosesc OSX

0
adăugat
psutil nu face parte din standardul lib
adăugat autor Corey Goldberg
Probabil cel mai elegant dintre toate răspunsurile
adăugat autor jsphpl

Dacă doriți date ușor de citit de utilizatori, dar încă detaliate, puteți utiliza platform.platform ()

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

Iată câteva posibile apeluri diferite pe care le puteți face pentru a identifica unde vă aflați

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

The outputs of this script ran on a few different systems is available here: https://github.com/hpcugent/easybuild/wiki/OS_flavor_name_version

0
adăugat

Verificați testele disponibile cu platforma modulului și tipăriți răspunsul pentru sistemul dvs.:

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
0
adăugat

eu fac asta

import sys
print sys.platform

Documentele aici: sys.platform .

Tot ce ai nevoie este probabil în modulul sys.

0
adăugat

Dang - lbrandy ma bătut la pumn, dar asta nu înseamnă că nu vă pot oferi rezultatele sistemului pentru Vista!

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

... și nu pot să cred că nimeni nu a postat unul pentru Windows 10 încă:

>>> import os
>>> os.name
'nt'
>>> import platform
>>> platform.system()
'Windows'
>>> platform.release()
'10'
0
adăugat
Aș fi crezut că este mai probabil să fiți upgradat de la Windows 8 (față de o instalare curată) și oricare ar fi Python în registru sau altceva care a fost lăsat în urmă?
adăugat autor OJFord
Deci, da, am fugit platform.release () pe Windows 10 . Poate că am instalat Python înainte de actualizare, dar într-adevăr?
adăugat autor Codesmith
Descărcarea de căutare pentru Python pe Windows pare să folosească funcția Win32 api GetVersionEx în centrul său. Notele de la începutul acestui articol Microsoft despre această funcție ar putea fi relevante: msdn.microsoft.com/en-us/library/windows/desktop/…
adăugat autor theferrit32
Windows 7: platform.release () '7'
adăugat autor Hugo

De asemenea, puteți utiliza sys.platform dacă ați importat deja sys și nu doriți să importați un alt modul

>>> import sys
>>> sys.platform
'linux2'
0
adăugat
Are o abordare avantajoasă, pe lângă faptul că trebuie sau nu să importe un alt modul?
adăugat autor matth
Scopul este principalul avantaj. Vrei cât mai puține nume de variabile globale posibil. Când aveți deja "sys" ca nume global, nu trebuie să adăugați altul. Dar dacă nu utilizați încă "sys", folosirea "_platform" ar putea fi mai descriptivă și mai puțin probabil să se ciocnească cu o altă semnificație.
adăugat autor sanderd17

Eu folosesc instrumentul WLST care vine cu weblogic și nu implementează pachetul de platforme.

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

În afară de patching-ul sistemului javaos.py ( problema cu os.system () pe Windows 2003 cu jdk1.5 ) (pe care nu o pot face, trebuie să folosesc weblogic din cutie), asta este ceea ce folosesc:

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

în aceeași ordine de idei....

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")
0
adăugat
is_windows = platform.system () .cazare inferioară () startswith ("win") sau false
adăugat autor Corey Goldberg
Acest lucru este problematic dacă sunteți pe un Mac de când platform.system () returnează "Darwin" pe un Mac și "Darwin" .lower () find ("win") = 3.
adăugat autor mishaF

/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)
0
adăugat
Bine ați venit pe SO, aici, este o practică bună să explicați de ce să vă folosiți soluția și nu doar cum. Acest lucru va face răspunsul dvs. mai valoros și va ajuta cititorul în continuare să aibă o mai bună înțelegere a modului în care faceți acest lucru. De asemenea, vă sugerăm să consultați întrebările frecvente: stackoverflow.com/faq .
adăugat autor ForceMagic
Răspuns bun, poate chiar la egalitate cu răspunsul original. Dar ai putea explica de ce.
adăugat autor vgoff

Dacă nu căutați versiunea kernel etc, dar căutați distribuția linux, vă recomandăm să utilizați următoarele

în 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

în Python2.4

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

Evident, acest lucru va funcționa numai dacă executați acest lucru pe linux. Dacă doriți să aveți mai mult script generic pe platforme, puteți amesteca acest lucru cu mostrele de cod date în alte răspunsuri.

0
adăugat

Cod de probă pentru a diferenția sistemul de operare utilizând 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
0
adăugat
Este acest exemplu de cod din orice modul python? Acesta este singurul răspuns care, de fapt, răspunde la întrebare.
adăugat autor kon psych
singurul răspuns elegant aici.
adăugat autor Michael IV
Pentru rezultate fuzionate, `` _platform.startswith ('linux')
adăugat autor Klaatu von Schlacker
răspunsul original așa cum se vede aici stackoverflow.com/a/8220141/3286832
adăugat autor Yannis

Doar pentru completare, variabila de mediu "OS" pare să fie definită pretutindeni. Pe Windows XP / 7/8/10 este setat la "Windows_NT". Pe Linux SuSE SP2 este setat la "x86-64 linux sles11 [2]". Nu am acces la mașinile OS-X sau BSD, ar fi interesant să verific și acolo.

import os

os_name = os.getenv("OS")
if os_name == "Windows_NT":
    # Windows
elif "linux" in os_name:
    # Linux
elif ...
0
adăugat

Utilizați cuvintele cheie import os și os.name .

0
adăugat