Ping Script - als antwoord

stemmen
0

Ik ben gewoon proberen om samen een eenvoudige server up / down script te zetten zoals ik net zijn begonnen met python te leren.

Hieronder vindt u het script ... maar ik kan het niet krijgen om de output van de server down deel van de code. het if response == 0Ik gok is het oppakken van de Destination Unreachable reactie en is het maken van een vals positief.

wat kan ik doen om dit te omzeilen?

# Server up/down Script

import os

hostname1 = input ( Please Enter IP Address: )

response = os.system(echo ping -a -c 1  + hostname1)

#and then check the response...
if response == 0: # This will check the host repeatedly
    print (hostname1, '\033[1;32m [ **SERVER ALIVE** ] \033[1;m')
    # As long as the server is up it will print the UP response in green text
else:
    print(hostname1, '[ **SERVER DOWN** ]')
print( 30 * -)
De vraag is gesteld op 07/11/2018 om 23:49
bron van user
In andere talen...                            


1 antwoorden

stemmen
0

response = os.system("echo ping -a -c 1 " + hostname1)

Het systeem opdracht die u uitvoert is slechts een echo, die net wordt afgedrukt " ping -a -c 1 <hostname>" naar stdout, en dan terug 0. Het doet er niet echt geen pingen. U kunt het testen door het systeem commando's direct op een terminal en het controleren van de geretourneerde waarde:

$ echo ping -a -c 1 8.8.8.8 
ping -a -c 1 8.8.8.8
$ echo $?  # returns 0
$ echo ping -a -c 1 <some.invalid.ip> 
<some.invalid.ip>
$ echo $?  # still returns 0

U moet verwijderen echoen gewoon doen:

response = os.system("ping -a -c 1 " + hostname1)

Die moet het juiste resultaat terug te keren:

# VALID IP

>>> response = os.system("ping -a -c 1 8.8.8.8")
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=1 ttl=119 time=5.80 ms

--- 8.8.8.8 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 5.803/5.803/5.803/0.000 ms
>>> print(response)
0

# INVALID IP

>>> response = os.system("ping -a -c 1 5.5.5.5")
PING 5.5.5.5 (5.5.5.5) 56(84) bytes of data.

--- 5.5.5.5 ping statistics ---
1 packets transmitted, 0 received, 100% packet loss, time 0ms

>>> print(response)
256

Voor system calls, raad ik aan om het te gebruiken subprocesspakket in plaats daarvan, waaronder subprocess.runfunctie die de uitvoer van de opdracht kan worden afgedrukt en dan terug een object met de commando's return code.

# VALID IP

>>> response = subprocess.run(["ping", "-c", "1", "8.8.8.8"])
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=1 ttl=119 time=5.19 ms

--- 8.8.8.8 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 5.194/5.194/5.194/0.000 ms
>>> response.returncode
0

# INVALID IP

>>> response = subprocess.run(["ping", "-c", "1", "5.5.5.5"])
PING 5.5.5.5 (5.5.5.5) 56(84) bytes of data.

--- 5.5.5.5 ping statistics ---
1 packets transmitted, 0 received, 100% packet loss, time 0ms

>>> response.returncode
1

Als je wilde naar de uitgang van het verbergen pingcommando, kunt u doorgeven subprocess.PIPEaan stdoutvan subprocess.run:

>>> response = subprocess.run(["ping", "-c", "1", "5.5.5.5"], stdout=subprocess.PIPE)
>>> response.returncode
1

De aanbeveling om gebruik subprocesswordt opgemerkt in de os.systemdoc :

De deelproces module biedt krachtiger faciliteiten voor paaien nieuwe processen en het ophalen van de resultaten daarvan; door deze module de voorkeur om deze functie. Zie het vervangen van oudere functies via het deelproces Module sectie in het subproces documentatie voor een aantal handige recepten

antwoordde op 08/11/2018 om 00:23
bron van user

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more