답변:
사용 socket
및 gethostname()
기능. 이것은 hostname
파이썬 인터프리터가 실행되는 컴퓨터를 얻습니다 .
import socket
print(socket.gethostname())
socket.getfqdn()
이 두 가지 모두 이식성이 뛰어납니다.
import platform
platform.node()
import socket
socket.gethostname()
HOST
또는 HOSTNAME
환경 변수를 사용하는 솔루션 은 이식성이 없습니다. 시스템을 실행할 때 시스템에서 작동하더라도 cron과 같은 특수 환경에서 실행될 때는 작동하지 않을 수 있습니다.
python -m timeit "import socket; socket.gethostname()" 10000 loops, best of 3: 76.3 usec per loop
python -m timeit "import platform; platform.node()" 1000000 loops, best of 3: 0.74 usec per loop
import os, platform; os.getenv('HOSTNAME', os.getenv('COMPUTERNAME', platform.node())).split('.')[0]
크로스 플랫폼이어야하고 환경 변수가 존재하는 경우 환경 변수를 지원해야합니다. 예를 들어 긴급 상황에서 일부 사용자 제어가 가능합니다.HOSTNAME=correct python xyz.py
어쨌든 os 모듈을로드 할 것이므로 다른 제안은 다음과 같습니다.
import os
myhost = os.uname()[1]
os
모듈 을 사용하는 솔루션의 경우 +1 휴대용이 아니며 정확하지는 않지만 어쨌든 편리합니다.
platform.uname()[1]
Windows에서 작동 하는 유사한 모양을 제공합니다 .
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.getfqdn()
OP가 요구하는 것은 아니지만, 아마도 원할 것이다
적어도 파이썬> = 3.3에서 :
필드 nodename
를 사용하고 배열 색인 작성을 피할 수 있습니다 .
os.uname().nodename
os.uname 의 문서조차도 사용을 제안합니다.socket.gethostname()
일부 시스템에서는 호스트 이름이 환경에서 설정됩니다. 이 경우 os 모듈 은 os.getenv 를 통해 환경에서 모듈 을 꺼낼 수 있습니다 . 예를 들어, HOSTNAME이 원하는 것을 포함하는 환경 변수이면 다음과 같이 얻을 수 있습니다.
import os
system_name = os.getenv('HOSTNAME')
업데이트 : 의견에서 언급했듯이 모든 사람의 환경이 이런 식으로 설정되는 것은 아니기 때문에 항상 작동하는 것은 아닙니다. 나는 내가 처음에 이것에 대답했을 때 나는이 솔루션을 사용하고 있다고 생각했다. 왜냐하면 그것은 웹 검색에서 처음 발견 된 것이었고 당시에는 저에게 효과적이었습니다. 이식성이 부족하기 때문에 아마도 이것을 사용하지 않을 것입니다. 그러나 참조 목적 으로이 답변을 남기고 있습니다. FWIW는 환경에 시스템 이름이 있고 이미 os 모듈을 가져 오는 경우 다른 가져 오기가 필요하지 않습니다. 테스트하십시오-프로그램이 작동 할 것으로 예상되는 모든 환경에서 작동하지 않으면 제공된 다른 솔루션 중 하나를 사용하십시오.
PyLog conf 파일에서 사용할 PC 이름이 필요했으며 소켓 라이브러리는 사용할 수 없지만 os 라이브러리는 사용할 수 있습니다.
Windows의 경우 다음을 사용했습니다.
os.getenv('COMPUTERNAME', 'defaultValue')
여기서 defaultValue는 None이 반환되지 않도록하는 문자열입니다.