platform — 기본 플랫폼 식별 데이터 접근
platform — 기본 플랫폼 식별 데이터 접근
소스 코드: Lib/platform.py
이 모듈은 현재 실행 중인 기본 플랫폼을 식별하는 데 사용되는 정보에 접근하기 위한 다양한 함수를 제공해요.
참고 — 특정 플랫폼은 알파벳순으로 나열되며, Linux는 Unix 절에 포함돼요.
출처: Python 표준 라이브러리
본문
크로스 플랫폼 (Cross platform)
platform.architecture(executable=sys.executable, bits='', linkage='')
주어진 실행 파일(기본값은 Python 인터프리터 바이너리)에서 다양한 아키텍처 정보를 조회해요.
실행 파일에 사용된 비트 아키텍처와 연결(linkage) 형식에 대한 정보를 담은 (bits, linkage) 튜플을 돌려줘요. 두 값 모두 문자열로 반환돼요.
결정할 수 없는 값은 매개변수 기본값으로 주어진 대로 반환돼요. bits가 ''로 주어지면 sizeof(pointer)(Python 1.5.2 미만에서는 sizeof(long))가 지원되는 포인터 크기의 지표로 사용돼요.
이 함수는 실제 작업을 위해 시스템의 file 명령에 의존해요. 이것은 대부분의 유닉스 플랫폼과 일부 비유닉스 플랫폼에서 사용할 수 있고, 실행 파일이 Python 인터프리터를 가리킬 때만 그렇고요. 위 요구 사항이 충족되지 않으면 합리적인 기본값이 사용돼요.
참고 — macOS(및 다른 플랫폼에서도) 실행 파일이 여러 아키텍처를 포함하는 유니버설 파일일 수 있어요. 현재 인터프리터가 "64비트"인지 확인하려면
sys.maxsize속성을 조회하는 것이 더 신뢰할 수 있어요:
is_64bits = sys.maxsize > 2**32
platform.machine()
머신 유형을 돌려줘요(예: 'AMD64'). 값을 결정할 수 없으면 빈 문자열을 돌려줘요.
출력은 플랫폼에 따라 달라지고 대소문자와 명명 규칙이 다를 수 있어요.
platform.node()
컴퓨터의 네트워크 이름을 돌려줘요(완전히 한정되지 않을 수 있어요!). 값을 결정할 수 없으면 빈 문자열을 돌려줘요.
platform.platform(aliased=False, terse=False)
가능한 한 많은 유용한 정보와 함께 기본 플랫폼을 식별하는 단일 문자열을 돌려줘요.
출력은 기계가 파싱하기보다는 사람이 읽도록 의도돼요. 플랫폼마다 다르게 보일 수 있고, 그것이 의도된 바예요.
aliased가 참이면 함수는 공통 이름과 다른 시스템 이름을 보고하는 여러 플랫폼에 별칭을 사용해요. 예를 들어 SunOS는 Solaris로 보고돼요. 이를 구현할 때 system_alias() 함수가 사용돼요.
terse를 참으로 설정하면 함수는 플랫폼을 식별하는 데 필요한 최소한의 정보만 돌려줘요.
버전 3.8에서 변경: macOS에서 함수는 이제 darwin 버전 대신 macOS 버전을 얻기 위해, 비어 있지 않은 release 문자열을 반환하면 mac_ver()를 사용함.
platform.processor()
(실제) 프로세서 이름을 돌려줘요(예: 'amdk6').
값을 결정할 수 없으면 빈 문자열을 돌려줘요. 많은 플랫폼이 이 정보를 제공하지 않거나 machine()과 같은 값을 반환한다는 점에 주의하세요. NetBSD가 그렇죠.
platform.python_build()
Python 빌드 번호와 날짜를 문자열로 명시하는 (buildno, builddate) 튜플을 돌려줘요.
platform.python_compiler()
Python을 컴파일하는 데 사용된 컴파일러를 식별하는 문자열을 돌려줘요.
platform.python_branch()
Python 구현 SCM 브랜치를 식별하는 문자열을 돌려줘요.
platform.python_implementation()
Python 구현을 식별하는 문자열을 돌려줘요. 가능한 반환 값은 'CPython', 'IronPython', 'Jython', 'PyPy'예요.
platform.python_revision()
Python 구현 SCM 개정판을 식별하는 문자열을 돌려줘요.
platform.python_version()
Python 버전을 'major.minor.patchlevel' 문자열로 돌려줘요. Python의 sys.version과 달리 반환 값은 항상 patchlevel을 포함한다는 점에 주의하세요(기본값 0).
platform.python_version_tuple()
Python 버전을 문자열의 (major, minor, patchlevel) 튜플로 돌려줘요. Python의 sys.version과 달리 반환 값은 항상 patchlevel을 포함한다는 점에 주의하세요(기본값 '0').
platform.release()
시스템의 릴리스를 돌려줘요(예: '2.2.0' 또는 'NT'). 값을 결정할 수 없으면 빈 문자열을 돌려줘요.
iOS와 Android에서는 이것이 사용자에게 보이는 OS 릴리스예요. Darwin 또는 Linux 커널 릴리스를 얻으려면 os.uname()을 사용하세요.
platform.system()
'Linux', 'Darwin', 'Java', 'Windows' 같은 시스템/OS 이름을 돌려줘요. 값을 결정할 수 없으면 빈 문자열을 돌려줘요.
iOS와 Android에서는 (즉, 'iOS', 'iPadOS' 또는 'Android') 사용자에게 보이는 OS 이름을 돌려줘요. 커널 이름('Darwin' 또는 'Linux')을 얻으려면 os.uname()을 사용하세요.
platform.system_alias(system, release, version)
일부 시스템에 사용되는 공통 마케팅 이름으로 별칭 처리된 (system, release, version)을 돌려줘요. 또한 혼란을 일으킬 수 있는 일부 경우에 정보를 재정렬하기도 해요.
platform.version()
시스템의 릴리스 버전을 돌려줘요(예: '#3 on degas'). 값을 결정할 수 없으면 빈 문자열을 돌려줘요.
platform.uname()
상당히 이식 가능한 uname 인터페이스예요. system, node, release, version, machine, processor의 여섯 속성을 담은 namedtuple을 돌려줘요.
processor는 필요할 때 늦게 해결돼요.
참고 — 처음 두 속성 이름은
sysname과nodename으로 명명된os.uname()이 제시하는 이름과 달라요.
결정할 수 없는 항목은 ''으로 설정돼요.
버전 3.3에서 변경: 결과가 튜플에서 namedtuple로 변경됨.
버전 3.9에서 변경: processor가 즉시가 아니라 늦게 해결됨.
platform.invalidate_caches()
uname() 같은 정보의 내부 캐시를 지워요. 이것은 보통 외부 프로세스가 플랫폼의 node()를 바꾸고 갱신된 값을 검색해야 할 때 유용해요.
버전 3.14에 추가.
Java 플랫폼
platform.java_ver(release='', vendor='', vminfo=('', '', ''), osinfo=('', '', ''))
Jython용 버전 인터페이스예요. vminfo가 (vm_name, vm_release, vm_vendor) 튜플이고 osinfo가 (os_name, os_version, os_arch) 튜플인 (release, vendor, vminfo, osinfo) 튜플을 돌려줘요. 결정할 수 없는 값은 매개변수로 주어진 기본값(모두 '' 기본값)으로 설정돼요.
버전 3.13부터 폐기, 버전 3.15에서 제거 예정: 대부분 테스트되지 않았고, 혼란스러운 API였으며, Jython 지원에만 유용했음.
Windows 플랫폼
platform.win32_ver(release='', version='', csd='', ptype='')
Windows 레지스트리에서 추가 버전 정보를 가져와 OS 릴리스, 버전 번호, CSD 수준(서비스 팩) 및 OS 유형(다중/단일 프로세서)을 참조하는 (release, version, csd, ptype) 튜플을 돌려줘요. 결정할 수 없는 값은 매개변수로 주어진 기본값(모두 빈 문자열 기본값)으로 설정돼요.
힌트로: ptype은 단일 프로세서 NT 머신에서는 'Uniprocessor Free', 다중 프로세서 머신에서는 'Multiprocessor Free'예요. 'Free'는 OS 버전에 디버깅 코드가 없다는 뜻이에요. 'Checked'라고 표시될 수도 있는데, 이는 OS 버전이 디버깅 코드(즉, 인자, 범위 등을 검사하는 코드)를 사용한다는 뜻이에요.
platform.win32_edition()
현재 Windows 에디션을 나타내는 문자열을 돌려주거나, 값을 결정할 수 없으면 None을 돌려줘요. 가능한 값으로는 'Enterprise', 'IoTUAP', 'ServerStandard', 'nanoserver' 등이 포함되지만 이에 국한되지는 않아요.
버전 3.8에 추가.
platform.win32_is_iot()
win32_edition()이 돌려준 Windows 에디션이 IoT 에디션으로 인식되면 True를 돌려줘요.
버전 3.8에 추가.
macOS 플랫폼
platform.mac_ver(release='', versioninfo=('', '', ''), machine='')
macOS 버전 정보를 가져와 versioninfo가 (version, dev_stage, non_release_version) 튜플인 (release, versioninfo, machine) 튜플로 돌려줘요.
결정할 수 없는 항목은 ''으로 설정돼요. 모든 튜플 항목은 문자열이에요.
iOS 플랫폼
platform.ios_ver(system='', release='', model='', is_simulator=False)
iOS 버전 정보를 가져와 다음 속성을 가진 namedtuple로 돌려줘요:
system— OS 이름.'iOS'또는'iPadOS'.release— 문자열인 iOS 버전 번호(예:'17.2').model— 기기 모델 식별자. 물리적 기기는'iPhone13,2'같은 문자열, 시뮬레이터에서는'iPhone'.is_simulator— 앱이 시뮬레이터에서 실행 중인지 물리적 기기에서 실행 중인지 설명하는 불리언.
결정할 수 없는 항목은 매개변수로 주어진 기본값으로 설정돼요.
Unix 플랫폼
platform.libc_ver(executable=sys.executable, lib='', version='', chunksize=16384)
실행 파일(기본값은 Python 인터프리터)이 링크된 libc 버전을 결정하려고 시도해요. 조회가 실패할 경우 주어진 매개변수로 기본 설정되는 문자열 (lib, version) 튜플을 돌려줘요.
이 함수는 다양한 libc 버전이 실행 파일에 기호를 어떻게 추가하는지에 대한 면밀한 지식을 가지므로, 아마 gcc로 컴파일된 실행 파일에서만 사용할 수 있다는 점에 주의하세요. 파일은 chunksize 바이트 청크로 읽고 스캔돼요.
Linux 플랫폼
platform.freedesktop_os_release()
os-release 파일에서 운영 체제 식별을 가져와 dict로 돌려줘요. os-release 파일은 freedesktop.org 표준이고 대부분의 Linux 배포판에서 사용할 수 있어요. 눈에 띄는 예외는 Android와 Android 기반 배포판이에요.
/etc/os-release도 /usr/lib/os-release도 읽을 수 없으면 OSError 또는 하위 클래스를 발생시켜요.
성공하면 키와 값이 문자열인 사전을 돌려줘요. 값은 "와 $ 같은 특수 문자를 따옴표 없이 가져요. NAME, ID, PRETTY_NAME 필드는 표준에 따라 항상 정의돼요. 다른 모든 필드는 선택사항이고, 공급업체가 추가 필드를 포함할 수 있어요.
NAME, VERSION, VARIANT 같은 필드는 사용자에게 보여주기에 적합한 문자열이라는 점에 주의하세요. 프로그램은 Linux 배포판을 식별하기 위해 ID, ID_LIKE, VERSION_ID 또는 VARIANT_ID 같은 필드를 사용해야 해요.
예제:
def get_like_distro():
info = platform.freedesktop_os_release()
ids = [info["ID"]]
if "ID_LIKE" in info:
# ids are space separated and ordered by precedence
ids.extend(info["ID_LIKE"].split())
return ids
버전 3.10에 추가.
Android 플랫폼
platform.android_ver(release='', api_level=0, manufacturer='', model='', device='', is_emulator=False)
Android 기기 정보를 가져와 다음 속성을 가진 namedtuple로 돌려줘요. 결정할 수 없는 값은 매개변수로 주어진 기본값으로 설정돼요.
release— 문자열인 Android 버전(예:"14").api_level— 실행 중인 기기의 API 레벨(예: Android 14의 경우 34)인 정수. Python이 빌드될 당시의 API 레벨을 얻으려면sys.getandroidapilevel()을 참고하세요.manufacturer— 제조업체 이름.model— 모델 이름. 보통 마케팅 이름이나 모델 번호.device— 기기 이름. 보통 모델 번호나 코드네임.is_emulator— 기기가 에뮬레이터면True, 물리적 기기면False.
Google은 알려진 모델·기기 이름 목록을 관리해요.
버전 3.13에 추가.
명령줄 사용법 (Command-line usage)
platform은 인터프리터의 -m 스위치를 사용해 직접 호출할 수도 있어요:
python -m platform [--terse] [--nonaliased] [{nonaliased,terse} ...]
다음 옵션이 허용돼요:
--terse— 플랫폼에 대한 간결한 정보를 인쇄해요.terse인자를True로 설정해platform.platform()을 호출하는 것과 같아요.--nonaliased— 시스템/OS 이름 별칭 처리 없이 플랫폼 정보를 인쇄해요.aliased인자를True로 설정해platform.platform()을 호출하는 것과 같아요.
위치 인자 하나 이상(terse, nonaliased)을 전달해 출력 형식을 명시적으로 제어할 수도 있어요. 이들은 해당 옵션과 비슷하게 동작해요.