अजगर स्क्रिप्ट चलाने वाली विंडोज़ कंप्यूटर का नाम?


94

मूल रूप से, मेरे पास मेरे नेटवर्क पर एक युगल विंडोज कंप्यूटर है जो एक पायथन स्क्रिप्ट चला रहा होगा। स्क्रिप्ट का एक अलग सेट स्क्रिप्ट में उपयोग किया जाना चाहिए, जिसके आधार पर कंप्यूटर इस स्क्रिप्ट को चला रहा है।

मुझे उस कंप्यूटर का नाम अजगर लिपि में कैसे मिलेगा?

मान लीजिए कि स्क्रिप्ट DARK-TOWER नामक कंप्यूटर पर चल रही थी, मैं कुछ इस तरह लिखना चाहता हूं:

>>> python.library.get_computer_name()
'DARK-TOWER'

क्या कोई मानक या तृतीय पक्ष लाइब्रेरी है जिसका मैं उपयोग कर सकता हूं?

जवाबों:


160

यह पता चला कि तीन विकल्प हैं (दो पहले से ही उत्तर सहित):

>>> import platform
>>> import socket
>>> import os
>>> platform.node()
'DARK-TOWER'
>>> socket.gethostname()
'DARK-TOWER'
>>> os.environ['COMPUTERNAME']
'DARK-TOWER'

16
अपने स्वयं के प्रश्न का उत्तर देना कुछ लोगों द्वारा खराब स्वाद माना जा सकता है, लेकिन यह पूरी तरह से ठीक है, एफएक्यू के अनुसार: stackoverflow.com/faq
Stephan202

9
मुझे नहीं लगता कि यह बुरा है, क्योंकि एरिक एक एकल संसाधन में कुछ अलग-अलग प्रतिक्रियाओं को संकलित कर रहा था, न कि एक नए (प्लेटफॉर्म) को जोड़ने का उल्लेख करने के लिए।
निलामो

4
ठीक है, तो यह एक अनुवर्ती के लिए रोता है: platform.node () और socket.gethostname () के बीच क्या अंतर है? क्या वे कभी अलग हो सकते हैं?
जेसन एस

4
पॉज़िक्स सिस्टम पर, socket.gethostname()libc देता है gethostname(), जबकि platform.node()रिटर्न platform.uname()[1]जो कुछ हद तक संबंधित होता है, os.uname()जिसे libc कहते हैं uname()... ऐसा लगता है कि वे एक ही स्थान पर समाप्त हो सकते हैं, लेकिन वे वहां पहुंचने के लिए काफी अलग रास्ते लेते हैं और मैं भरोसा नहीं करूंगा विभिन्न प्लेटफार्मों में समान होने के लिए मूल्य पर।
पीटर गिब्सन

5
टिप्पण लायक है कि os.environ['COMPUTERNAME']सभी बड़े वापस आ जाएगी, जबकि platform.node()और socket.gethostname()मिश्रित केस लौट सकते हैं।
मृणोबा

33
import socket
socket.gethostname()

1
इसके लिए +1 सबसे अच्छा तरीका है। यह सबसे प्रभावी क्रॉस-प्लेटफॉर्म कॉल है।
joshin4colours

20

5
यह मेरे लिए OS-X 10.6.8 पर पायथन 2.7.2 का उपयोग करके काम नहीं करता है, यह कोई भी नहीं लौटाता है। हालांकि वर्णित अन्य तरीके काम करते हैं।
पीटर गिब्सन

2
@PeterGibson मेरे पास उबंटू 12.04 पर एक ही बात थी।
डैनियल एफ

रिटर्न Noneउबंटू 16.04 पर मेरे लिए। दिलचस्प बात यह है HOSTNAMEबैश में एक परिभाषित वातावरण चर, लेकिन दोनों है os.getenv('HOSTNAME')रिटर्न Noneभी है, जबकि socket.gethostname()रिटर्न सही स्ट्रिंग।
मैट हैनकॉक

12

जैसा कि एरिक पालकोविच कार ने कहा कि आप इन तीन वेरिएंट का उपयोग कर सकते हैं।

मैं उन्हें एक साथ उपयोग करना पसंद करता हूं:

def getpcname():
    n1 = platform.node()
    n2 = socket.gethostname()
    n3 = os.environ["COMPUTERNAME"]
    if n1 == n2 == n3:
        return n1
    elif n1 == n2:
        return n1
    elif n1 == n3:
        return n1
    elif n2 == n3:
        return n2
    else:
        raise Exception("Computernames are not equal to each other")

जब मैं निश्चित होना क्रॉस क्रॉसफॉर्म एप्लिकेशन विकसित करना पसंद करता हूं;)


1
बस थोड़ा सा क्लीनर: अगर n1 == n2 या n2 == n3: वापसी n1 elif n2 == n3: वापसी n2 और: अपवाद उठाएं ("कंप्यूटर नाम एक दूसरे के बराबर नहीं हैं")
चार्ल्स प्लेजर

2
@CharlesPlager यह होना चाहिए: if n1==n2 or n1==n3: return n1 elif n2==n3: return n2 else: raise Exception("Computer names are not equal to each other")(के n1बजाय n2)
dexteritas

@dexteritas: आप सही हैं। (यह मुझे जो भी कारण के लिए इसे संपादित नहीं होने देगा)।
चार्ल्स प्लेजर

6

चूंकि पायथन स्क्रिप्स एक विंडोज़ सिस्टम पर चलने के लिए सुनिश्चित हैं, इसलिए आपको Win32 API GetComputerName या GetComputerNameEx का उपयोग करना चाहिए

आप पूरी तरह से योग्य DNS नाम, या NETBIOS नाम, या विभिन्न प्रकार की चीजें प्राप्त कर सकते हैं।

import win32api
win32api.GetComputerName()

>>'MYNAME'

या:

import win32api
WIN32_ComputerNameDnsHostname = 1 
win32api.GetComputerNameEx(WIN32_ComputerNameDnsHostname)

>> u'MYNAME'


0
import socket
pc = socket.gethostname()
print pc

6
कृपया उत्तर में हमेशा कुछ स्पष्टीकरण जोड़ें।
डेफॉइस

इसके अलावा, यह उत्तर एक 10-वर्षीय पुराने अति-उत्कीर्ण अन्य उत्तर की एक प्रति मात्र है ।
वोवैनो
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.