Python:我在运行什么操作系统?

我需要看看我是否在Windows,Unix等?

0
额外 编辑
意见: 1
这里有一个相关的问题:检查linux发行版名称
额外 作者 blong,
有关详细信息,请参阅( bugs.python.org/issue12326 )。
额外 作者 arnkore,

19 答案

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

platform.system()的输出如下所示:

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

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

0
额外
为什么我更喜欢 platform over sys.platform
额外 作者 matth,
@matth稍微一致的输出。即 platform.system()返回“Windows”而不是“win32”sys.platform 在老版本的Python中也包含“linux2”,而在新版本中只包含“linux”platform.system()总是返回“Linux”
额外 作者 erb,
在mac os X上,platform.system()总是返回“Darwin”?或者还有其他情况吗?
额外 作者 baptiste chéné,

这里记录的是Mac上的结果:

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

您也可以只使用平台模块,而无需导入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]
0
额外

Windows 8上有趣的结果:

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

Edit: That's a bug

0
额外

注意,如果您使用Cygwin在Windows上,其中 os.nameposix

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

对于Jython来说,获得os名称的唯一方法是检查 os.name Java属性(用 sysos在WinXP上用于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
0
额外

新的答案如何?

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

如果我使用OSX,这将是输出

0
额外
psutil不是标准lib的一部分
额外 作者 Corey Goldberg,
可能是所有答案中最优雅的
额外 作者 jsphpl,

如果您希望用户可读的数据,但仍然详细,您可以使用 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(),
))

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
额外

使用模块平台检查可用的测试,并为您的系统打印答案:

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
额外

我这样做

import sys
print sys.platform

这里的文档: sys.platform

你需要的一切可能是在sys模块中。

0
额外

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'
0
额外
我一直认为它更有可能是从Windows 8升级(而不是干净的安装),无论Python在注册表中查找什么或留下什么东西?
额外 作者 OJFord,
所以,是的,我只是跑<�代码> platform.release()</代码>我的的Windows 10 ,它肯定只是给了我的 '8' </代码>。也许我在升级之前安装了python,但真的吗?
额外 作者 Codesmith,
Windows上的python版本查找似乎在其核心使用Win32 api函数GetVersionEx。有关该功能的Microsoft文章顶部的注释可能是相关的: msdn.microsoft.com/en-us/library/windows/desktop/…
额外 作者 theferrit32,
Windows 7: platform.release() '7'
额外 作者 Hugo,

如果您已经导入了sys,并且您不想导入另一个模块,也可以使用sys.platform

>>> import sys
>>> sys.platform
'linux2'
0
额外
除了必须或不需要导入另一个模块之外,这些方法是否有任何优势?
额外 作者 matth,
范围确定是主要优势。您希望尽可能少的全局变量名称。当你已经有“sys”作为全局名称时,你不应该添加另一个。但是如果你还没有使用“sys”,使用“_platform”可能会更具描述性,并且不太可能与其他含义相冲突。
额外 作者 sanderd17,

我使用的是与weblogic一起提供的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使用jdk1.5在windows 2003上使用os.system()问题)(我不能这样做,我必须使用开箱即用的weblogic),这就是我使用的:

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

以同样的方式......

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
额外
is_windows = platform.system()。lower()。startswith(“win”)或False
额外 作者 Corey Goldberg,
这是有问题的,因为platform.system()在Mac和“Darwin”.lower()。find(“win”)= 3上返回“Darwin”。
额外 作者 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
额外
欢迎来到SO,在这里,解释为什么要使用您的解决方案是一个很好的做法,而不仅仅是如何。这会让你的答案更有价值,并有助于读者更好地理解你是如何做到的。我还建议你看看我们的FAQ: stackoverflow.com/faq
额外 作者 ForceMagic,
很好的答案,甚至可以与原始答案保持一致。但你可以解释为什么。
额外 作者 vgoff,

如果你不是在寻找内核版本等,但寻找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上运行这个时才会起作用。如果您希望跨平台使用更多通用脚本,可以将其与其他答案中给出的代码示例混合使用。

0
额外

示例代码来区分使用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
额外
这是来自任何python模块的示例代码吗?这是事实上回答问题的唯一答案。
额外 作者 kon psych,
这里唯一的优雅答案。
额外 作者 Michael IV,
对于模糊的结果,`_platform.startswith('linux')
额外 作者 Klaatu von Schlacker,
原始答案,如此处所示 stackoverflow.com/a/8220141/3286832
额外 作者 Yannis,

为了完整性,“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 ...
0
额外

使用 import osos.name 关键字。

0
额外