Когда использовать os.name, sys.platform или platform.system?

Насколько мне известно, Python имеет 3 способа узнать, на какой операционной системе работает:

  1. os.name
  2. sys.platform
  3. platform.system ()

Знание этой информации часто полезно при условном импорте или использовании функций, которые различаются между платформами (например, time.clock () в Windows против time.time () в UNIX).

У меня вопрос, почему это можно сделать тремя разными способами? Когда следует использовать один способ, а не другой? Какой способ является «лучшим» (наиболее перспективным или с наименьшей вероятностью случайно исключить конкретную систему, на которой действительно может работать ваша программа)?

Похоже, что sys.platform более конкретен, чем os.name , что позволяет отличать win32 от cygwin (в отличие от просто nt ) и linux2 из Дарвина (в отличие от просто posix ). Но если это так, то как насчет разницы между sys.platform и platform.system () ?

Например, что лучше, это:

import sys
if sys.platform == 'linux2':
    # Do Linux-specific stuff

или это ? :

import platform
if platform.system() == 'Linux':
    # Do Linux-specific stuff

Пока я буду придерживаться sys.platform , так что этот вопрос не особенно актуален, но я был бы очень благодарен за некоторые разъяснения по этому поводу.

93
задан CharlesB 25 February 2013 в 15:11
поделиться