Python: Sur quel OS je cours?

Que dois-je regarder pour voir si je suis sous Windows, Unix, etc?

0
Voici une question connexe: Vérifiez le nom de la distribution linux .
ajouté l'auteur blong, source
voir ( bugs.python.org/issue12326 ) pour plus de détails!
ajouté l'auteur arnkore, source

19 Réponses

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

La sortie de platform.system() est la suivante:

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

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

0
ajouté
Pourquoi devrais-je préférer platform sur sys.platform ?
ajouté l'auteur matth, source
@matth Sortie légèrement plus cohérente. c'est-à-dire platform.system() renvoie "Windows" au lieu de "win32" . sys.platform contient aussi "linux2" sur les anciennes versions de Python alors qu'il contient juste "linux" sur les versions plus récentes. platform.system() a toujours retourné juste "Linux" .
ajouté l'auteur erb, source
Sur Mac OS X, platform.system() retourne toujours "Darwin"? ou y a-t-il d'autres cas possibles?
ajouté l'auteur baptiste chéné, source

Pour le compte rendu, voici les résultats sur Mac:

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

Vous pouvez également utiliser uniquement le module de plate-forme sans importer le module os pour obtenir toutes les informations.

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

Une mise en page agréable et bien rangé à des fins de reporting peut être réalisée en utilisant cette ligne:

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

Cela donne cette sortie:

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

Ce qui manque habituellement, c'est la version du système d'exploitation mais vous devez savoir si vous utilisez windows, linux ou mac une manière indipendente de plate-forme d'utiliser ce test:

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

Des résultats intéressants sur Windows 8:

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

Edit: That's a bug

0
ajouté

Faites attention si vous êtes sur Windows avec Cygwin où os.name est posix .

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

Pour Jython, la seule façon d'obtenir le nom d'os que j'ai trouvé est de vérifier la propriété Java os.name (essayée avec sys , os et modules de plate-forme pour Jython 2.5.3 sous 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
ajouté

Que diriez-vous d'une nouvelle réponse:

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

Ce serait la sortie si j'utilisais OSX

0
ajouté
psutil ne fait pas partie de la librairie standard
ajouté l'auteur Corey Goldberg, source
Probablement la plus élégante de toutes les réponses
ajouté l'auteur jsphpl, source

Si vous voulez des données lisibles par l'utilisateur mais toujours détaillées, vous pouvez utiliser platform.platform()

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

Voici quelques différents appels possibles que vous pouvez faire pour identifier où vous êtes

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
ajouté

Vérifiez les tests disponibles avec la plateforme de module et imprimez la réponse pour votre système:

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
ajouté

je fais ça

import sys
print sys.platform

Docs ici: sys.platform .

Tout ce dont vous avez besoin est probablement dans le module sys.

0
ajouté

Dang-lbrandy m'a battu au punch, mais cela ne signifie pas que je ne peux pas vous fournir les résultats du système pour Vista!

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

... et je ne peux pas croire que personne n'en a encore posté un pour Windows 10:

>>> import os
>>> os.name
'nt'
>>> import platform
>>> platform.system()
'Windows'
>>> platform.release()
'10'
0
ajouté
J'aurais pensé qu'il est plus probable que vous avez mis à jour à partir de Windows 8 (par opposition à une installation propre) et tout ce que Python lève dans le registre ou tout ce qui a été laissé derrière?
ajouté l'auteur OJFord, source
Donc, oui, je viens de lancer platform.release() sur mon Windows 10 , et ça m'a juste donné '8' . Peut-être que j'ai installé python avant la mise à niveau, mais vraiment ??
ajouté l'auteur Codesmith, source
La recherche de version pour python sur Windows semble utiliser la fonction WinV api GetVersionEx à sa base. Les notes en haut de cet article Microsoft sur cette fonction peuvent être pertinentes: msdn.microsoft.com/en-us/library/windows/desktop/…
ajouté l'auteur theferrit32, source
Windows 7: platform.release() '7'
ajouté l'auteur Hugo, source

Vous pouvez également utiliser sys.platform si vous avez déjà importé sys et que vous ne voulez pas importer un autre module

>>> import sys
>>> sys.platform
'linux2'
0
ajouté
Est-ce que les approches ont des avantages, en plus d'avoir à importer ou non un autre module?
ajouté l'auteur matth, source
La portée est le principal avantage. Vous voulez aussi peu de noms de variables globales que possible. Lorsque vous avez déjà "sys" comme nom global, vous ne devriez pas en ajouter un autre. Mais si vous n'utilisez pas encore "sys", l'utilisation de "_platform" pourrait être plus descriptive et moins susceptible de se heurter à une autre signification.
ajouté l'auteur sanderd17, source

J'utilise l'outil WLST fourni avec weblogic, et il n'implémente pas le package de plate-forme.

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

En dehors de patcher le système javaos.py ( problème avec os.system() sur windows 2003 avec jdk1.5 ) (ce que je ne peux pas faire, je dois utiliser weblogic dans sa boîte), voici ce que j'utilise:

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

dans la même veine....

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
ajouté
is_windows = platform.system (). lower (). startswith ("win") ou Faux
ajouté l'auteur Corey Goldberg, source
Ceci est problématique si vous utilisez un Mac car platform.system() retourne "Darwin" sur un Mac et "Darwin" .lower (). Find ("win") = 3.
ajouté l'auteur mishaF, source

/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
ajouté
Bienvenue sur SO, ici, c'est une bonne pratique d'expliquer pourquoi utiliser votre solution et pas seulement comment. Cela rendra votre réponse plus utile et aidera le lecteur à mieux comprendre comment vous le faites. Je vous suggère également de consulter notre FAQ: stackoverflow.com/faq .
ajouté l'auteur ForceMagic, source
Bonne réponse, peut-être même à la hauteur de la réponse originale. Mais vous pourriez expliquer pourquoi.
ajouté l'auteur vgoff, source

Si vous ne cherchez pas la version du noyau, etc., mais que vous recherchez la distribution Linux, vous pouvez utiliser les éléments suivants

en 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

en python2.4

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

Évidemment, cela ne fonctionnera que si vous utilisez Linux. Si vous souhaitez avoir un script plus générique sur plusieurs plates-formes, vous pouvez le mélanger avec des exemples de code donnés dans d'autres réponses.

0
ajouté

Exemple de code pour différencier les systèmes d'exploitation en utilisant 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
ajouté
Est-ce que cet exemple de code provient de n'importe quel module python? C'est la seule réponse qui répond en fait à la question.
ajouté l'auteur kon psych, source
la seule réponse élégante ici.
ajouté l'auteur Michael IV, source
Pour des résultats plus flous, `` _platform.startswith ('linux')
ajouté l'auteur Klaatu von Schlacker, source
réponse originale comme vu ici stackoverflow.com/a/8220141/3286832
ajouté l'auteur Yannis, source

Juste pour être complet, la variable d'environnement "OS" semble être définie partout. Sous Windows XP / 7/8/10, il est défini sur "Windows_NT". Sous Linux SuSE SP2, il est défini sur "x86-64 linux sles11 [2]". Je n'ai pas accès aux machines OS-X ou BSD, il serait intéressant de vérifier là aussi.

import os

os_name = os.getenv("OS")
if os_name == "Windows_NT":
    # Windows
elif "linux" in os_name:
    # Linux
elif ...
0
ajouté

Utilisez les mots clés import os et os.name .

0
ajouté