উইন্ডোজ কম্পিউটারে চলছে অজগর স্ক্রিপ্টের নাম?


98

মূলত, আমার নেটওয়ার্কে আমার কাছে কয়েকটি উইন্ডোজ কম্পিউটার রয়েছে যা পাইথন স্ক্রিপ্টটি চালাবে। কোন কম্পিউটার এই স্ক্রিপ্টটি চালাচ্ছে তার উপর নির্ভর করে স্ক্রিপ্টে কনফিগারেশন অপশনের একটি আলাদা সেট ব্যবহার করা উচিত।

অজগর লিপিটিতে আমি কীভাবে এই কম্পিউটারটির নাম পাব?

ধরা যাক স্ক্রিপ্টটি ডার্ক-টাওয়ার নামে একটি কম্পিউটারে চলছিল, আমি এই জাতীয় কিছু লিখতে চাই:

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

আমি ব্যবহার করতে পারি এমন কোনও স্ট্যান্ডার্ড বা তৃতীয় পক্ষের লাইব্রেরি আছে কি?

উত্তর:


163

এটিতে তিনটি বিকল্প রয়েছে (দুটি ইতিমধ্যে উত্তর দেওয়া দুটি সহ):

>>> 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
ঠিক আছে, তাই এটি ফলোআপের জন্য চিৎকার করে: প্ল্যাটফর্ম.নোড () এবং সকেট.জথোস্টনেম () এর মধ্যে পার্থক্য কী? তারা কি কখনও আলাদা হতে পারে?
জেসন এস

4
পোস্টিক্স সিস্টেমে, socket.gethostname()libc প্রদান করে gethostname(), যখন কিছুটা সম্পর্কিত যা platform.node()রিটার্ন দেয় platform.uname()[1]যা os.uname()libc বলে uname()... দেখে মনে হচ্ছে তারা একই জায়গায় শেষ হতে পারে তবে তারা সেখানে পৌঁছানোর জন্য বেশ আলাদা পথ নিয়েছে এবং আমি নির্ভর করব না বিভিন্ন প্ল্যাটফর্মগুলিতে একই মান হিসাবে মান।
পিটার গিবসন

4
লক্ষণীয় যে os.environ['COMPUTERNAME']সমস্ত বড় হাতের অক্ষরে ফিরে আসবে, platform.node()এবং socket.gethostname()মিশ্র ক্ষেত্রে ফিরে আসতে পারে।
মিঃনুব


20

4
পাইথন ২.7.২ ব্যবহার করে এটি OS-X 10.6.8 এ আমার পক্ষে কাজ করে না, এটি কিছুই দেয় না। বর্ণিত অন্যান্য পদ্ধতিগুলি তবে কাজ করে।
পিটার গিবসন

4
@ পিটারগিবসন উবুন্টু ১২.০৪-তে আমার কাছে একই ঘটনা ঘটেছিল।
ড্যানিয়েল এফ

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")

নিশ্চিত হওয়ার জন্য ক্রস প্যাটফর্ম অ্যাপ্লিকেশনগুলি বিকাশ করার সময় আমি এটিকে পছন্দ করি;)


4
কিছুটা ক্লিনার: যদি এন 1 == এন 2 বা এন 2 == এন 3: রিটার্ন এন 1 এলিফ এন 2 == এন 3: রিটার্ন এন 2: ব্যাতিক্রম বৃদ্ধি করুন ("কম্পিউটারের নাম একে অপরের সমান নয়")
চার্লস প্লাগার

4
@ চারেলস প্লাজার এটি হওয়া উচিত: 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)
ডেক্সটারিটাস

@ ডেক্সটারিটাস: আপনি সঠিক বলেছেন। (এটি কোনও কারণেই আমাকে এডিট করতে দেবে না)।
চার্লস প্লাজার

6

যেহেতু পাইথন স্ক্রিপ্টগুলি উইন্ডোজ সিস্টেমে নিশ্চিতভাবে চলমান, তাই আপনার উইন 32 এপিআই গেটকম্পিউটারনাম বা গেট কম্পিউটার কম্পিউটার নাম ব্যবহার করা উচিত

আপনি পুরোপুরি যোগ্যতাসম্পন্ন ডিএনএস নাম, বা নেটবিওএস নাম, বা বিভিন্ন ধরণের বিভিন্ন জিনিস পেতে পারেন।

import win32api
win32api.GetComputerName()

>>'MYNAME'

বা:

import win32api
WIN32_ComputerNameDnsHostname = 1 
win32api.GetComputerNameEx(WIN32_ComputerNameDnsHostname)

>> u'MYNAME'


আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.