获取有关环境中运行的Python的操作系统和版本的信息。

商业

标准库中的平台模块用来获取Python所运行的操作系统及其版本(发行版)的信息。使用这个模块,可以为每个操作系统和版本切换进程。

这里提供了以下信息。

  • 获取操作系统名称。platform.system()
  • 获取版本(发行)信息。platform.release(),version()
  • 一次性获得操作系统和版本。platform.platform()
  • 每个操作系统的结果实例
    • macOS
    • Windows
    • Ubuntu
  • 根据操作系统切换处理的示例代码

如果你想知道你所运行的Python的版本,请看下面的文章。

前半部分的所有示例代码都在macOS Mojave 10.14.2上运行;后半部分显示了在Windows和Ubuntu上的示例结果;后半部分还讨论了操作系统的特定功能。

获取操作系统名称: platform.system()

操作系统名称由platform.system()获得。返回值是一个字符串。

import platform

print(platform.system())
# Darwin

获取版本(发行)信息: platform.release(), version()

操作系统的版本(release)信息可以通过以下函数获得。在这两种情况下,其返回值都是一个字符串。

  • platform.release()
  • platform.version()

如下面的例子所示,platform.release()返回更简单的内容。

print(platform.release())
# 18.2.0

print(platform.version())
# Darwin Kernel Version 18.2.0: Mon Nov 12 20:24:46 PST 2018; root:xnu-4903.231.4~2/RELEASE_X86_64

一次性获得操作系统和版本: platform.platform()

操作系统名称和版本(发行)信息可以通过platform.platform()一起获得。其返回值是一个字符串。

print(platform.platform())
# Darwin-18.2.0-x86_64-i386-64bit

如果参数terse的值为TRUE,将只返回最小的信息。

print(platform.platform(terse=True))
# Darwin-18.2.0

还有一个参数是aliased。

print(platform.platform(aliased=True))
# Darwin-18.2.0-x86_64-i386-64bit

在示例环境中的结果是一样的,但有些操作系统会返回一个别名作为操作系统的名称。

如果别名为真,它使用别名而不是系统的通用名称返回结果。例如,SunOS变成Solaris。
platform.platform() — Access to underlying platform’s identifying data — Python 3.10.0 Documentation

每个操作系统的结果实例

将展示在macOS、Windows和Ubuntu上的结果实例,以及特定操作系统的功能。

macOS

在macOS Mojave 10.14.2上的结果示例。与上面显示的例子相同。

print(platform.system())
# Darwin

print(platform.release())
# 18.2.0

print(platform.version())
# Darwin Kernel Version 18.2.0: Mon Nov 12 20:24:46 PST 2018; root:xnu-4903.231.4~2/RELEASE_X86_64

print(platform.platform())
# Darwin-18.2.0-x86_64-i386-64bit

请注意,这是达尔文,而不是macOS或Mojave。
关于达尔文的更多信息,见维基百科页面。还有关于macOS中最新版本号和名称之间的对应关系的描述。

有一个madOS专用的函数叫platform.mac_ver()。
返回值作为一个元组(release, versioninfo, machine)返回。
在示例环境中,versioninfo是未知的,是一个空字符串元组。

print(platform.mac_ver())
# ('10.14.2', ('', '', ''), 'x86_64')

窗户

在Windows 10 Home上的结果示例。

print(platform.system())
# Windows

print(platform.release())
# 10

print(platform.version())
# 10.0.17763

print(platform.platform())
# Windows-10-10.0.17763-SP0

请注意,platform.release()的返回值10是一个字符串,而不是一个整数。

有一个Windows特有的函数叫 platform.win32_ver()。
返回值作为一个元组(release, version, csd, ptype)返回。
csd表示服务包的状态。

print(platform.win32_ver())
# ('10', '10.0.17763', 'SP0', 'Multiprocessor Free')

乌班图

在Ubuntu 18.04.1 LTS上的结果示例。

print(platform.system())
# Linux

print(platform.release())
# 4.15.0-42-generic

print(platform.version())
# #45-Ubuntu SMP Thu Nov 15 19:32:57 UTC 2018

print(platform.platform())
# Linux-4.15.0-44-generic-x86_64-with-Ubuntu-18.04-bionic

有一个Unix特有的函数 platform.linux_distribution()。
返回值作为一个元组(distname, version, id)返回。

print(platform.linux_distribution())
# ('Ubuntu', '18.04', 'bionic')

注意 platform.linux_distribution() 已经在 Python 3.8 中被移除。建议使用第三方库发行版来代替,这需要使用 pip 来单独安装。

根据操作系统切换处理的示例代码

如果你想根据操作系统切换要使用的函数或方法,你可以使用platform.system()这样的方法来确定数值。

下面是一个获取文件创建日期的例子。

def creation_date(path_to_file):
    """
    Try to get the date that a file was created, falling back to when it was
    last modified if that isn't possible.
    See http://stackoverflow.com/a/39501288/1709587 for explanation.
    """
    if platform.system() == 'Windows':
        return os.path.getctime(path_to_file)
    else:
        stat = os.stat(path_to_file)
        try:
            return stat.st_birthtime
        except AttributeError:
            # We're probably on Linux. No easy way to get creation dates here,
            # so we'll settle for when its content was last modified.
            return stat.st_mtime

在这个例子中,首先使用platform.system()的值来确定是Windows还是其他。
然后,它进一步使用异常处理,在st_birthtime属性存在的情况和其他情况之间切换进程。

Copied title and URL