Yanıtlar:
Kullanımı socket
ve gethostname()
işlevselliği. Bu hostname
, Python yorumlayıcısının çalıştığı bilgisayarı alacaktır :
import socket
print(socket.gethostname())
socket.getfqdn()
Her ikisi de oldukça taşınabilir:
import platform
platform.node()
import socket
socket.gethostname()
HOST
Veya HOSTNAME
ortam değişkenlerini kullanan hiçbir çözüm taşınabilir değildir. Çalıştırırken sisteminizde çalışıyor olsa bile, cron gibi özel ortamlarda çalıştırıldığında çalışmayabilir.
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]
platformlar arası olmalı ve varsa ortam değişkenlerini desteklemelidir - bu, HOSTNAME=correct python xyz.py
Muhtemelen os modülünü zaten yükleyeceksiniz, bu yüzden başka bir öneri:
import os
myhost = os.uname()[1]
os
Modülü kullanarak bir çözüm için +1 . Taşınabilir değil ve gerçekten doğru değil, ama yine de kullanışlı.
platform.uname()[1]
, Windows'da ÇALIŞAN benzer bir görünüm verir .
Ne dersin :
import platform
h = platform.uname()[1]
Aslında tüm sonuçlara bir göz atmak isteyebilirsiniz. platform.uname()
os.getenv('HOSTNAME')
ve os.environ['HOSTNAME']
her zaman çalışmaz. Cron işlerinde ve WSDL'de HTTP HOSTNAME ayarlanmadı. Bunun yerine şunu kullanın:
import socket
socket.gethostbyaddr(socket.gethostname())[0]
/ Etc / hosts içinde kısa bir diğer ad tanımlamış olsanız bile, her zaman (Windows'ta bile) tam nitelikli bir ana bilgisayar adı döndürür .
Eğer bir takma ad tanımlı ise / etc / hosts sonra socket.gethostname()
diğer adı dönecektir. platform.uname()[1]
aynı şeyi yapar.
Yukarıdakilerin işe yaramadığı bir davaya girdim. Şimdi ne kullanıyorum:
import socket
if socket.gethostname().find('.')>=0:
name=socket.gethostname()
else:
name=socket.gethostbyaddr(socket.gethostname())[0]
İlk olarak bir ana bilgisayar adı gibi görünen bir şey döndürüp döndürmediğini görmek için gethostname'i çağırır, değilse orijinal çözümümü kullanır.
socket.getfqdn()
, ancak OP sorduğu şey değil
En azından python> = 3.3'ten :
Alanı kullanabilir nodename
ve dizi indekslemeyi kullanmaktan kaçınabilirsiniz:
os.uname().nodename
Her ne kadar, hatta dokümantasyon os.uname kullanarak önerirsocket.gethostname()
Bazı sistemlerde, ana bilgisayar adı ortamda ayarlanır. Bu sizin için geçerliyse , os modülü os.getenv aracılığıyla ortamdan çıkarabilir . Örneğin, HOSTNAME istediğinizi içeren ortam değişkeniyse, aşağıdakini alır:
import os
system_name = os.getenv('HOSTNAME')
Güncelleme: Yorumlarda belirtildiği gibi, herkesin ortamı bu şekilde ayarlanmadığı için bu her zaman işe yaramaz. Başlangıçta buna cevap verdiğimde, bu çözümü bir web aramasında bulduğum ilk şey olduğu için kullandığımı ve o zaman benim için çalıştığını düşünüyorum. Taşınabilirlik eksikliğinden dolayı muhtemelen bunu şimdi kullanmam. Ancak, bu yanıtı referans amaçlı olarak bırakıyorum. FWIW, ortamınız sistem adına sahipse ve zaten os modülünü içe aktarıyorsanız, diğer ithalatlara olan ihtiyacı ortadan kaldırır. Test edin - programınızın çalışmasını beklediğiniz tüm ortamlarda çalışmazsa, sağlanan diğer çözümlerden birini kullanın.
Benim PyLog conf dosyasında kullanmak için PC adını gerekiyordu ve soket kütüphanesi mevcut değil, ama os kütüphanesi.
İçin , Windows kullandığım:
os.getenv('COMPUTERNAME', 'defaultValue')
DefaultValue, None döndürülmesini önlemek için bir dizedir
Bu kod satırını yürütmeniz gerekiyor
sock_name = socket.gethostname()
Sonra addr'i bulmak için adı kullanabilirsiniz:
print(socket.gethostbyname(sock_name))