Ping Σενάριο - αν ανταπόκριση

ψήφοι
0

Είμαι απλώς προσπαθεί να βάλει μαζί ένα απλό εξυπηρετητή πάνω / κάτω σενάριο όπως έχω μόλις αρχίσει να μάθουν python.

Παρακάτω είναι το σενάριο ... αλλά δεν μπορώ να το πάρει για την έξοδο του διακομιστή κάτω τμήμα του κώδικα. η if response == 0υποθέτω είναι να πάρει το «Προορισμός Unreachable» απάντηση και κάνει μια ψευδή θετικά.

τι μπορώ να κάνω για να πάρει γύρω από αυτό;

# 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 * -)
Δημοσιεύθηκε 07/11/2018 στις 23:49
πηγή χρήστη
Σε άλλες γλώσσες...                            


1 απαντήσεις

ψήφοι
0

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

Η εντολή του συστήματος που εκτελεί είναι μόνο ένα echo, το οποίο απλά θα εκτυπώσει « ping -a -c 1 <hostname>» στο stdout, και στη συνέχεια επιστρέφουν 0. Δεν κάνει πραγματικά οποιαδήποτε πινγκ. Μπορείτε να το δοκιμάσετε εκτελώντας τις εντολές του συστήματος άμεσα σε ένα τερματικό και τον έλεγχο της τιμής επιστροφής:

$ 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

Θα πρέπει να αφαιρέσετε echoκαι μόλις κάνετε:

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

Ποια θα πρέπει να επιστρέψει το σωστό αποτέλεσμα:

# 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

Για κλήσεις σύστημα, συνιστώ να χρησιμοποιήσετε το subprocessπακέτο αντ 'αυτού, η οποία περιλαμβάνει subprocess.runλειτουργία που μπορεί να εκτυπώσει την έξοδο εντολών και στη συνέχεια επιστρέφουν ένα αντικείμενο που περιέχει κώδικα επιστροφή του εντολής.

# 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

Αν ήθελε να κρύψει την έξοδο της pingεντολής, μπορείτε να περάσετε subprocess.PIPEγια να stdoutτης subprocess.run:

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

Η σύσταση για τη χρήση subprocessσημειώνεται στο os.systemέγγραφο :

Η υπο- ενότητα παρέχει πιο ισχυρά μέσα για την ωοτοκία νέες διαδικασίες και την ανάκτηση των αποτελεσμάτων τους? χρησιμοποιώντας εν λόγω μονάδα ελέγχου είναι προτιμότερο να χρησιμοποιούν αυτή τη λειτουργία. Δείτε τις αντικατάσταση των παλαιότερων λειτουργίες με το υπο-ενότητα ενότητα στην υπο- τεκμηρίωση για μερικές χρήσιμες συνταγές

Απαντήθηκε 08/11/2018 στις 00:23
πηγή χρήστη

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