जवाबों:
उपयोग socket
और इसकी gethostname()
कार्यक्षमता। यह hostname
उस कंप्यूटर से मिलेगा जहां पायथन इंटरप्रेटर चल रहा है:
import socket
print(socket.gethostname())
socket.getfqdn()
ये दोनों बहुत पोर्टेबल हैं:
import platform
platform.node()
import socket
socket.gethostname()
HOST
या HOSTNAME
पर्यावरण चर का उपयोग करने वाला कोई भी समाधान पोर्टेबल नहीं है। भले ही आप इसे चलाते समय आपके सिस्टम पर काम करते हों, लेकिन क्रोन जैसे विशेष वातावरण में चलने पर यह काम नहीं कर सकता है।
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
आप शायद वैसे भी ओएस मॉड्यूल को लोड करेंगे, इसलिए एक और सुझाव होगा:
import os
myhost = os.uname()[1]
os
मॉड्यूल का उपयोग कर समाधान के लिए +1 । पोर्टेबल नहीं है और वास्तव में सटीक नहीं है, लेकिन वैसे भी काम करते हैं।
platform.uname()[1]
, जो विंडोज पर काम करता है।
व्हाट अबाउट :
import platform
h = platform.uname()[1]
वास्तव में आप में सभी परिणाम के लिए एक नज़र रखना चाहते हो सकता है platform.uname()
os.getenv('HOSTNAME')
और os.environ['HOSTNAME']
हमेशा काम नहीं करते। क्रॉन जॉब्स और WSDL में, HTTP HOSTNAME सेट नहीं है। इसके बजाय इसका उपयोग करें:
import socket
socket.gethostbyaddr(socket.gethostname())[0]
यह हमेशा (यहां तक कि विंडोज पर) पूरी तरह से योग्य होस्ट नाम देता है, भले ही आपने / etc / मेजबान में एक छोटा उपनाम परिभाषित किया हो ।
यदि आपने / आदि / मेजबानों में एक उपनाम को परिभाषित किया है तो 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()
, हालांकि यह नहीं है कि ओपी क्या पूछता है
यदि मैं सही हूं, तो आप सॉकेट के लिए देख रहे हैं।
>> import socket
>> socket.gethostname()
'terminus'
कम से कम अजगर से = = 3.3 :
आप फ़ील्ड का उपयोग कर सकते हैं nodename
और सरणी अनुक्रमण का उपयोग करने से बच सकते हैं :
os.uname().nodename
हालांकि, यहां तक कि os.uname के प्रलेखन का उपयोग करने का सुझाव देता हैsocket.gethostname()
कुछ सिस्टम पर, होस्टनाम वातावरण में सेट है। यदि आपके लिए यही स्थिति है, तो ओएस मॉड्यूल , ओस्सेटिव के माध्यम से इसे पर्यावरण से बाहर निकाल सकता है । उदाहरण के लिए, यदि HOSTNAME पर्यावरण चर है जिसमें आप चाहते हैं, तो निम्नलिखित मिलेगा:
import os
system_name = os.getenv('HOSTNAME')
अपडेट: जैसा कि टिप्पणियों में कहा गया है, यह हमेशा काम नहीं करता है, क्योंकि हर किसी का वातावरण इस तरह से सेट नहीं किया जाता है। मेरा मानना है कि जिस समय मैंने शुरू में इसका उत्तर दिया था मैं इस समाधान का उपयोग कर रहा था क्योंकि यह पहली चीज थी जिसे मैंने वेब खोज में पाया था और यह उस समय मेरे लिए काम करती थी। पोर्टेबिलिटी की कमी के कारण मैं शायद अब इसका इस्तेमाल नहीं करूंगा। हालांकि, मैं इस जवाब को संदर्भ उद्देश्यों के लिए छोड़ रहा हूं। एफडब्ल्यूआईडब्ल्यू, यह अन्य आयातों की आवश्यकता को समाप्त करता है यदि आपके पर्यावरण में सिस्टम का नाम है और आप पहले से ही ओएस मॉड्यूल आयात कर रहे हैं। इसका परीक्षण करें - यदि यह उन सभी वातावरणों में काम नहीं करता है जिसमें आप अपने कार्यक्रम को संचालित करने की अपेक्षा करते हैं, तो दिए गए अन्य समाधानों में से एक का उपयोग करें।
मुझे अपने PyLog conf फ़ाइल में उपयोग करने के लिए पीसी के नाम की आवश्यकता थी, और सॉकेट लाइब्रेरी उपलब्ध नहीं है, लेकिन ओएस लाइब्रेरी है।
के लिए विंडोज मैं प्रयोग किया है:
os.getenv('COMPUTERNAME', 'defaultValue')
जहां DefaultValue एक स्ट्रिंग है जिसे कोई नहीं लौटा सकता है
आपको कोड की इस लाइन को निष्पादित करना होगा
sock_name = socket.gethostname()
और फिर आप एड्र को खोजने के लिए नाम का उपयोग कर सकते हैं:
print(socket.gethostbyname(sock_name))