source

Python을 사용하여 시스템 호스트 이름을 가져오려면 어떻게 해야 합니까?

manycodes 2022. 11. 25. 20:53
반응형

Python을 사용하여 시스템 호스트 이름을 가져오려면 어떻게 해야 합니까?

저는 지역 방송국의 채팅 프로그램을 쓰고 있어요.Python으로 컴퓨터를 식별하고 사용자가 설정한 컴퓨터 이름을 얻을 수 있으면 좋겠습니다.

용도와 그 기능.이렇게 하면hostnamePython 인터프리터가 실행되고 있는 컴퓨터의 경우:

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']항상 효과가 있는 것은 아니다.cron 작업과 WSDL에서는 HTTP HOSTNAME이 설정되어 있지 않습니다.대신 이것을 사용하세요.

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

/etc/hosts에서 짧은 별칭을 정의했더라도 윈도우즈에서도 항상 정규화된 호스트 이름을 반환합니다.

/etc/hosts에서 에일리어스를 정의한 경우socket.gethostname()에일리어스가 반환됩니다. platform.uname()[1]같은 일을 합니다.

저는 위의 내용이 통하지 않는 경우에 부딪혔습니다.현재 사용하고 있는 것은 다음과 같습니다.

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

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

적어도 python >= 3.3부터:

필드를 사용할 수 있습니다.nodename어레이 인덱스를 사용하지 않도록 합니다.

os.uname().nodename

단, os.uname의 문서에서도socket.gethostname()

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

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

socket.gethostname()할 수 있다

이 코드 라인을 실행해야 합니다.

sock_name = socket.gethostname()

그런 다음 이름을 사용하여 주소를 찾을 수 있습니다.

print(socket.gethostbyname(sock_name))

시스템에 따라서는, 호스트명이 환경에서 설정됩니다.이 경우 os 모듈 os.getenv를 통해 환경에서 꺼낼 수 있습니다.예를 들어 HOSTNAME이 원하는 것을 포함하는 환경변수일 경우 다음과 같이 취득됩니다.

import os
system_name = os.getenv('HOSTNAME')

업데이트: 댓글에서 설명한 바와 같이 모든 사용자의 환경이 이러한 방식으로 설정되는 것은 아니기 때문에 이 방법이 항상 작동하는 것은 아닙니다.처음에 이 질문에 대답했을 때는 이 솔루션을 사용하고 있었다고 생각합니다.그것은 웹 검색에서 처음 발견한 것이었기 때문입니다.그때 저는 이 솔루션을 사용할 수고가 많았습니다.휴대성이 부족하기 때문에 지금은 사용하지 않을 것입니다.하지만 이 답변은 참고용으로 남겨두겠습니다.FWIW는 사용자 환경에 시스템 이름이 있고 이미 os 모듈을 Import하고 있는 경우 다른 Import를 수행할 필요가 없습니다.테스트 - 프로그램이 동작할 것으로 예상되는 모든 환경에서 동작하지 않을 경우 제공된 다른 솔루션 중 하나를 사용하십시오.

완전 수식 호스트명을 취득하려면 socket.getfqdn()을 사용합니다.

import socket

print socket.getfqdn()

PyLog conf 파일에서 사용할 PC 이름이 필요했고 소켓 라이브러리는 사용할 수 없지만 os 라이브러리는 사용할 수 있습니다.

Windows의 경우:

os.getenv('COMPUTERNAME', 'defaultValue')

여기서 defaultValue는 없음 반환을 방지하는 문자열입니다.

언급URL : https://stackoverflow.com/questions/4271740/how-can-i-use-python-to-get-the-system-hostname

반응형