Ping Script - în cazul în care răspunsul

voturi
0

Sunt doar încercarea de a pune împreună un server simplu sus / jos script-ul așa cum am început să învețe Python.

Mai jos este script - ul ... dar nu pot să- l ajunge la ieșire Server jos secțiunea de cod. if response == 0Sunt ghicitul receptează „destinația inaccesibilă“ , răspunsul și este de a face un fals pozitiv.

ce pot face pentru a obține în jurul valorii de asta?

# 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 * -)
Întrebat 07/11/2018 la 23:49
sursa de către utilizator
În alte limbi...                            


1 răspunsuri

voturi
0

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

Comanda de sistem pe care îl execută este doar o echo, care se va imprima doar „ ping -a -c 1 <hostname>“ le va afișa, și apoi să se întoarcă 0. Nu face într - adevăr nici un șuierat. Puteți să - l testa prin rularea comenzilor de sistem direct pe un terminal și verificarea valorii de retur:

$ 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

Ar trebui să eliminați echoși nu doar:

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

Care ar trebui să se întoarcă rezultatul corect:

# 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

Pentru apeluri de sistem, recomand să utilizați subprocesspachetul de schimb, care include subprocess.runfuncția pe care se poate imprima de ieșire de comandă și apoi să se întoarcă un obiect care conține codul returnata de comanda.

# 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

Dacă ați fi dorit să se ascundă de ieșire a pingcomenzii, puteți trece subprocess.PIPEla stdoutde subprocess.run:

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

Recomandarea utilizării subprocessse menționează în os.systemdoc :

Subproces Modulul oferă facilități mai puternice pentru depunerea icrelor noi procese și preluarea rezultatelor acestora; utilizarea acestui modul este de preferat să utilizați această funcție. Consultați Funcții Înlocuirea mai vechi cu modulul subprocesul secțiunea din subproces documentația pentru unele retete utile

Publicat 08/11/2018 la 00:23
sursa de către utilizator

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