programing

언제 os.name , sys.platform 또는 platform.system을 사용해야 합니까?

codeshow 2023. 8. 5. 11:08
반응형

언제 os.name , sys.platform 또는 platform.system을 사용해야 합니까?

Python은 실행 중인 운영 체제를 확인하는 세 가지 방법이 있는 것으로 알고 있습니다.

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

를 아는 가져오기 또는 을 사용할 때 유용합니다( 이 아 예 가 또 플 간 조 기 랫 폼 에 른 다 는 기 능 오 져 부 건 정 보 종 를 종 은 는 것 :time.clock()Windows 버전입니다.time.time()UNIX().

제 질문은, 왜 이것을 하는 세 가지 다른 방법이 있을까 하는 것입니다.언제 다른 방법이 아닌 한 가지 방법을 사용해야 합니까?프로그램이 실제로 실행될 수 있는 특정 시스템을 가장 미래에 대비하거나 실수로 제외할 가능성이 가장 낮은 '최상의' 방법은 무엇입니까?

는 것 같습니다.sys.platform는 보구체입다보다 더 입니다.os.name을 할 수 있게 해주는win32cygwin와는 로)nt ), 및linux2darwin와는 로)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그래서 이 질문은 특별히 급하지는 않지만, 저는 이것과 관련하여 약간의 설명을 해주시면 매우 감사하겠습니다.

소스 코드를 조금 들여다 보았습니다.

의 출력.sys.platform그리고.os.name컴파일 시간에 결정됩니다.platform.system()런타임에 시스템 유형을 결정합니다.

  • sys.platform빌드 구성 중 컴파일러 정의로 지정됩니다.
  • os.name을 사용할 수 특정관 OS 할수예있확는인니다합지용사을련모듈예▁are(:다▁checks니확▁whether합).posix,nt, ...)
  • platform.system() 실로실됨을 실행합니다.uname실행 시 시스템 유형을 결정할 수 있는 기타 여러 기능이 있습니다.

내 제안:

  • 사용하다os.namePosix 호환 시스템인지 확인합니다.
  • 사용하다sys.platform리눅스, 사이버윈, 다윈, 테오스 등을 확인합니다.
  • 사용하다platform.system()당신이 다른 출처를 믿지 않는다면요.

사이에는 얇은 선의 차이가 있습니다.platform.system()그리고.sys.platform그리고 대부분의 경우 흥미롭게도.platform.system()으로 퇴는하보로 퇴화합니다.sys.platform

소스는 다음과 같습니다.Python2.7\Lib\Platform.py\system말한다

def system():

    """ Returns the system/OS name, e.g. 'Linux', 'Windows' or 'Java'.

        An empty string is returned if the value cannot be determined.

    """
    return uname()[0]

def uname():
    # Get some infos from the builtin os.uname API...
    try:
        system,node,release,version,machine = os.uname()
    except AttributeError:
        no_os_uname = 1

    if no_os_uname or not filter(None, (system, node, release, version, machine)):
        # Hmm, no there is either no uname or uname has returned
        #'unknowns'... we'll have to poke around the system then.
        if no_os_uname:
            system = sys.platform
            release = ''
            version = ''
            node = _node()
            machine = ''

또한 설명서에 따라

os.uname ()

현재 운영 체제를 식별하는 정보가 포함된 5개의 튜플을 반환합니다.튜플에는 5개의 문자열(sysname, nodename, 릴리스, 버전, 시스템)이 포함되어 있습니다.일부 시스템에서는 노드 이름을 8자 또는 선행 구성 요소로 잘라냅니다. 호스트 이름을 가져오는 더 나은 방법은 socket.gethostname() 또는 socket.gethostname()입니다. addr(socket.gethostname()).

Availability: recent flavors of Unix.

문서에서:

  • os.name 보다 조잡한 입도를 가짐
  • os.uname() 시스템 종속 버전 정보 제공
  • 이 모듈은 시스템 ID에 대한 상세한 점검을 제공합니다.

종종 일부 기능을 사용할 수 있는지 여부를 테스트하는 "최상의" 미래 대비 방법은 해당 기능을 사용하려고 시도하고 실패할 경우 예비 기능을 사용하는 것입니다.

sys.platform과 platform.system()의 차이점은 무엇입니까?

platform.system() 여러 소스에서 얻을 수 있는 정규화된 값을 반환합니다.os.uname(),sys.platform,ver명령(Windows의 경우)

이는 테스트되지 않은 시스템에서 예외를 발생시키거나 시도하는 것을 선호하는지 여부와 코드가 테스트되지 않은 유사한 시스템(예: 테스트되지 않은 Mac - 'posix' 또는 내장된 ARM 시스템)에서 작동할 수 있을 정도로 높은 수준인지 또는 낮은 수준인지 여부에 따라 달라집니다.더 비단결적인 것은 알려진 모든 시스템을 열거하는 것이 아니라 가능한 관련 속성을 테스트하는 것입니다.(예: 시스템의 엔디엔티는 중요하지만 중요하지 않은 다중 처리 특성으로 간주됩니다.)

  • os.name 은 올바른 사용을 위한 충분한 해결책입니다.os모듈.Python 2.7에서 사용 가능한 값은 'posix', 'nt', 'os2', 'ce', 'java' 또는 'riscos'이며, Python 3.4 이후에는 'posix', 'nt' 및 'java'만 사용됩니다.

  • sys.platform이 더 나은 해상도입니다.다음을 사용하는 것이 좋습니다.if sys.platform.startswith('linux')"linux2"가 리눅스 커널 버전 2.xx 또는 3을 의미하기 때문에 관용구입니다.이전 커널은 현재 사용되지 않습니다.Python 3.3에서는 모든 Linux 시스템이 단순한 'linux'입니다.

저는 "Mac"과 "Java" 시스템의 세부 사항을 모르기 때문에 분기에 매우 좋은 method platform.system()의 결과를 사용할 수 없지만, 저는 이 시스템의 장점을 사용할 것입니다.platform메시지 및 오류 로깅을 위한 모듈입니다.

아마도 새로운 코드를 위해서는 플랫폼 모듈이 선호될 것이라고 생각합니다.다른 것들은 그 이전에 존재했습니다.이것은 진화이며, 다른 것들은 하위 호환성을 위해 남아 있습니다.

sys.platform컴파일 시간에 결정됩니다.platform.system()실행 시간을 결정합니다.

이것은 이전의 사용법이 구문을 확인하고 IDE에서 도달 불가능한 코드 블록을 흐리게 하는 기능을 가지고 있음을 의미합니다.

IMO, 만약sys.platform사용자의 요구를 충족시키고 코드에서 잘 작동합니다. 사용하십시오.

언급URL : https://stackoverflow.com/questions/4553129/when-to-use-os-name-sys-platform-or-platform-system

반응형