Hoe kan ik Python gebruiken om de hostnaam van het systeem te krijgen?

Ik schrijf een chatprogramma voor een lokaal netwerk. Ik zou graag computers kunnen identificeren en de door de gebruiker ingestelde computernaam kunnen krijgen met Python.


Antwoord 1, autoriteit 100%

Gebruik socketen zijn gethostname()functionaliteit. Dit krijgt de HOSTNAMEvan de computer waarop de Python-interpreter draait:

import socket
print(socket.gethostname())

Antwoord 2, autoriteit 35%

Beide zijn behoorlijk draagbaar:

import platform
platform.node()
import socket
socket.gethostname()

Alle oplossingen die de omgevingsvariabelen HOSTof HOSTNAMEgebruiken, zijn niet overdraagbaar. Zelfs als het op uw systeem werkt wanneer u het uitvoert, werkt het mogelijk niet wanneer het wordt uitgevoerd in speciale omgevingen zoals cron.


Antwoord 3, autoriteit 12%

U zult de os-module waarschijnlijk toch laden, dus een andere suggestie zou zijn:

import os
myhost = os.uname()[1]

Antwoord 4, autoriteit 6%

Hoe zit het met:

import platform
h = platform.uname()[1]

Eigenlijk wil je misschien alle resultaten bekijken in platform.uname()


Antwoord 5, autoriteit 5%

os.getenv('HOSTNAME')en os.environ['HOSTNAME']werken niet altijd. In cron-taken en WSDL is HTTP HOSTNAME niet ingesteld. Gebruik in plaats daarvan dit:

import socket
socket.gethostbyaddr(socket.gethostname())[0]

Het retourneert altijd (zelfs op Windows) een volledig gekwalificeerde hostnaam, zelfs als u een korte alias hebt gedefinieerd in /etc/hosts.

Als je een alias hebt gedefinieerd in /etc/hosts, dan zal socket.gethostname()de alias retourneren. platform.uname()[1]doet hetzelfde.

Ik kwam een ​​geval tegen waarin het bovenstaande niet werkte. Dit is wat ik nu gebruik:

import socket
if socket.gethostname().find('.')>=0:
    name=socket.gethostname()
else:
    name=socket.gethostbyaddr(socket.gethostname())[0]

Het roept eerst gethostname aan om te zien of het iets teruggeeft dat op een hostnaam lijkt, zo niet, dan gebruikt het mijn originele oplossing.


Antwoord 6, autoriteit 2%

Van ten minste python >= 3.3:

U kunt het veld nodenamegebruiken en het gebruik van array-indexering vermijden:

os.uname().nodename

Hoewel zelfs de documentatie van os.unamesuggereert met behulp van socket.gethostname()


Antwoord 7, autoriteit 2%

Als ik het goed heb, zoek je de functie socket.gethostname:

>> import socket
>> socket.gethostname()
'terminus'

Antwoord 8

socket.gethostname()zou kunnen doen


Antwoord 9

Op sommige systemen wordt de hostnaam in de omgeving ingesteld. Als dat voor jou het geval is, kan de os modulehet uit de omgeving halen via os.getenv. Als HOSTNAME bijvoorbeeld de omgevingsvariabele is die bevat wat u wilt, krijgt het volgende het:

import os
system_name = os.getenv('HOSTNAME')

Update: Zoals vermeld in de opmerkingen, werkt dit niet altijd, omdat niet ieders omgeving op deze manier is ingesteld. Ik geloof dat ik op het moment dat ik dit voor het eerst antwoordde, deze oplossing gebruikte, omdat dit het eerste was dat ik had gevonden in een zoekopdracht op internet en het op dat moment voor mij werkte. Vanwege het gebrek aan draagbaarheid zou ik dit nu waarschijnlijk niet gebruiken. Ik laat dit antwoord echter voor referentiedoeleinden. FWIW, het elimineert de noodzaak voor andere importen als uw omgeving de systeemnaam heeft en u de os-module al importeert. Test het – als het niet werkt in alle omgevingen waarin u verwacht dat uw programma werkt, gebruik dan een van de andere aangeboden oplossingen.


Antwoord 10

Ik had de naam van de pc nodig om te gebruiken in mijn PyLog-configuratiebestand en de socketbibliotheek is niet beschikbaar, maar de os-bibliotheek wel.

Voor Windowsgebruikte ik:

os.getenv('COMPUTERNAME', 'defaultValue')

Waar defaultValue een tekenreeks is om te voorkomen dat Geen wordt geretourneerd


Antwoord 11

Je moet deze regel code uitvoeren

sock_name = socket.gethostname()

En dan kun je de naam gebruiken om het adres te vinden:

print(socket.gethostbyname(sock_name))

Antwoord 12

Gebruik socket.getfqdn() om een ​​volledig gekwalificeerde hostnaam te krijgen

import socket
print socket.getfqdn()

LEAVE A REPLY

Please enter your comment!
Please enter your name here

15 + 7 =

Other episodes