[python] 파이썬을 사용하여 시스템 호스트 이름을 얻는 방법은 무엇입니까?

로컬 네트워크 용 채팅 프로그램을 작성 중입니다. 파이썬으로 컴퓨터를 식별하고 사용자 설정 컴퓨터 이름을 얻을 수 있기를 바랍니다.



답변

사용 socketgethostname()기능. 이것은 hostname파이썬 인터프리터가 실행되는 컴퓨터를 얻습니다 .

import socket
print(socket.gethostname())


답변

이 두 가지 모두 이식성이 뛰어납니다.

import platform
platform.node()

import socket
socket.gethostname()

HOST또는 HOSTNAME환경 변수를 사용하는 솔루션 은 이식성이 없습니다. 시스템을 실행할 때 시스템에서 작동하더라도 cron과 같은 특수 환경에서 실행될 때는 작동하지 않을 수 있습니다.


답변

어쨌든 os 모듈을로드 할 것이므로 다른 제안은 다음과 같습니다.

import os
myhost = os.uname()[1]


답변

이건 어떤가요 :

import platform

h = platform.uname()[1]

실제로 모든 결과를 살펴보고 싶을 수도 있습니다. platform.uname()


답변

os.getenv('HOSTNAME')그리고 os.environ['HOSTNAME']항상 작동하지 않습니다. 크론 작업 및 WSDL에서 HTTP HOSTNAME이 설정되지 않았습니다. 대신 이것을 사용하십시오 :

import socket
socket.gethostbyaddr(socket.gethostname())[0]

/ etc / hosts 에 짧은 별명을 정의한 경우에도 항상 (Windows에서도) 완전한 호스트 이름을 리턴 합니다 .

당신이 별명 정의 된 경우 / 등 / 호스트는 다음 socket.gethostname()별칭을 반환합니다. platform.uname()[1]같은 일을합니다.

위의 방법으로 작동하지 않는 경우가 발생했습니다. 이것이 내가 지금 사용하고있는 것입니다 :

import socket
if socket.gethostname().find('.')>=0:
    name=socket.gethostname()
else:
    name=socket.gethostbyaddr(socket.gethostname())[0]

먼저 gethostname을 호출하여 원래 솔루션을 사용하지 않는 경우 호스트 이름처럼 보이는 것을 반환하는지 확인합니다.


답변

내가 맞다면 socket.gethostname 함수를 찾고 있습니다.

>> import socket
>> socket.gethostname()
'terminus'


답변

적어도 파이썬> = 3.3에서 :

필드 nodename를 사용하고 배열 색인 작성을 피할 수 있습니다 .

os.uname().nodename

os.uname 의 문서조차도 사용을 제안합니다.socket.gethostname()