로컬 네트워크 용 채팅 프로그램을 작성 중입니다. 파이썬으로 컴퓨터를 식별하고 사용자 설정 컴퓨터 이름을 얻을 수 있기를 바랍니다.
답변
사용 socket
및 gethostname()
기능. 이것은 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()