Pada dasarnya, saya memiliki beberapa komputer Windows di jaringan saya yang akan menjalankan skrip python. Serangkaian opsi konfigurasi yang berbeda harus digunakan dalam skrip tergantung pada komputer mana yang menjalankan skrip ini.
Bagaimana saya mendapatkan nama komputer itu di skrip python?
Misalkan skrip dijalankan di komputer bernama DARK-TOWER, saya ingin menulis sesuatu seperti ini:
>>> python.library.get_computer_name()
'DARK-TOWER'
Apakah ada pustaka standar atau pihak ketiga yang dapat saya gunakan?
python
windows
networking
Eric Palakovich Carr
sumber
sumber
socket.gethostname()
kembalikan libcgethostname()
, sedangkanplatform.node()
pengembalianplatform.uname()[1]
yang agak terkait denganos.uname()
yang memanggil libcuname()
... Sepertinya mereka mungkin berakhir di tempat yang sama, tetapi mereka mengambil jalur yang sangat berbeda untuk sampai ke sana dan saya tidak akan mengandalkan pada nilai agar sama di berbagai platform.os.environ['COMPUTERNAME']
akan mengembalikan semua huruf besar, sedangkanplatform.node()
dansocket.gethostname()
dapat mengembalikan huruf besar / kecil.import socket socket.gethostname()
sumber
Dari https://mail.python.org/pipermail/python-list/2006-April/397494.html
import os os.getenv('COMPUTERNAME')
sumber
None
untuk saya di Ubuntu 16.04. Menariknya,HOSTNAME
adalah variabel lingkungan yang ditentukan di bash, tetapi keduanya jugaos.getenv('HOSTNAME')
mengembalikanNone
, sambilsocket.gethostname()
mengembalikan string yang benar.Seperti yang dikatakan Eric Palakovich Carr, Anda dapat menggunakan ketiga varian ini.
Saya lebih suka menggunakannya bersama:
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")
Saya lebih suka saat mengembangkan aplikasi lintas bentuk untuk memastikan;)
sumber
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
bukann2
)Karena skrip python pasti berjalan di sistem windows, Anda harus menggunakan Win32 API GetComputerName atau GetComputerNameEx
Anda bisa mendapatkan nama DNS yang memenuhi syarat, atau nama NETBIOS, atau berbagai hal lain.
import win32api win32api.GetComputerName() >>'MYNAME'
Atau:
import win32api WIN32_ComputerNameDnsHostname = 1 win32api.GetComputerNameEx(WIN32_ComputerNameDnsHostname) >> u'MYNAME'
sumber
Saya yakin gethostname akan bekerja dengan baik.
sumber
import socket pc = socket.gethostname() print pc
sumber