回答:
使用socket
とそのgethostname()
機能。これhostname
により、Pythonインタープリターが実行されているコンピューターが取得されます。
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']
常に機能するとは限りません。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を呼び出して、ホスト名のように見えるものを返すかどうかを確認します。そうでない場合は、元のソリューションを使用します。
socket.getfqdn()
OPが要求するものではありませんが、おそらく必要です
少なくともpython> = 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が返されないようにするための文字列です。
このコード行を実行する必要があります
sock_name = socket.gethostname()
そして、あなたはその名前を使ってaddrを見つけることができます:
print(socket.gethostbyname(sock_name))