web-dev-qa-db-ja.com

Pythonを使用してシステムのホスト名を取得する方法を教えてください。

私はローカルネットワーク用のチャットプログラムを書いています。 Pythonを使ってコンピュータを識別し、ユーザー設定のコンピュータ名を取得したいと思います。

576
John

socketgethostname() の機能を使用してください。これはPythonインタプリタが走っているコンピュータのhostnameを取得します。

import socket
print(socket.gethostname())
889
Alex

どちらもかなり移植性があります。

import platform
platform.node()

import socket
socket.gethostname()

HostまたはHOSTNAME環境変数を使用した解決策は移植性がありません。実行時にシステム上で動作しても、cronなどの特別な環境で実行されたときには動作しない可能性があります。

337
robert

とにかくosモジュールをロードするでしょうから、別の提案があります:

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

os.getenv('HOSTNAME')os.environ['HOSTNAME']はいつもうまくいくとは限りません。 cronジョブおよびWSDLでは、HTTP HOSTNAMEは設定されていません。代わりにこれを使ってください。

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

/etc/hosts に短いエイリアスを定義した場合でも、常に(Windows上でも)完全修飾ホスト名を返します。

/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を呼び出して、ホスト名のようなものを返すかどうかを確認します。そうでない場合は、私のオリジナルのソリューションを使用します。

56
Tom Ekberg

どうですか?

import platform

h = platform.uname()[1]

実際には、platform.uname()のすべての結果を調べたいと思うかもしれません。

53
Lucien Hercaud

正しければ、socket.gethostname関数を探しています。

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

socket.gethostname()ができること

11
vpit3833

少なくとも からpython> = 3.3

あなたはフィールドnodenameを使うことができ、配列のインデックスを使わないでください:

os.uname().nodename

ただし、 os.uname のドキュメントでもsocket.gethostname()を使用することをお勧めします。

7

一部のシステムでは、ホスト名は環境に設定されています。もしそうなら、 osモジュールos.getenv を介して環境からそれを取り出すことができます。例えば、HOSTNAMEがあなたが欲しいものを含む環境変数であるならば、以下はそれを取得するでしょう:

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

更新:コメントで述べたように、これは必ずしもうまくいくとは限りません。すべての人の環境がこのように設定されているわけではないからです。私は最初にこれに答えたときに私はそれが私がウェブ検索で見つけた最初の事であったので私がこの解決策を使っていたと信じていて、それはその時私のために働いた。移植性の欠如のために、私はおそらくこれを今は使わないでしょう。しかし、私はこの回答を参考のために残しています。あなたの環境にシステム名があり、あなたがすでにosモジュールをインポートしているのであれば、他のインポートの必要性を排除します。それをテストしてください - あなたのプログラムが動作することを期待しているすべての環境でうまくいかない場合は、提供されている他の解決策の一つを使ってください。

3
GreenMatt

このコード行を実行する必要があります

sock_name = socket.gethostname()

そして、その名前を使ってaddrを見つけることができます。

print(socket.gethostbyname(sock_name))
0
Parzifal Kali

PyLogの設定ファイルで使用するPCの名前が必要で、ソケットライブラリは利用できませんが、osライブラリは利用できます。

Windows 私が使った:

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

DefaultValueはNoneが返されないようにするための文字列です。

0
Bill Kidd